我對你有個好消息和壞消息。壞消息是沒有開箱即用的解決方案。好消息是,xmlproperty
任務是相當可擴展的感謝揭露processNode()
方法作爲保護。這裏是你可以做什麼:
1.創建和編譯的ant.jar(你可以找到一個在lib
子目錄在你的螞蟻分佈或get it from Maven)在類路徑下面的代碼:
package pl.sobczyk.piotr;
import org.apache.tools.ant.taskdefs.XmlProperty;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
public class MyXmlProp extends XmlProperty{
@Override
public Object processNode(Node node, String prefix, Object container) {
if(node.hasAttributes()){
NamedNodeMap nodeAttributes = node.getAttributes();
Node nameNode = nodeAttributes.getNamedItem("name");
if(nameNode != null){
String name = nameNode.getNodeValue();
String value = node.getTextContent();
if(!value.trim().isEmpty()){
String propName = prefix + "[" + name + "]";
getProject().setProperty(propName, value);
}
}
}
return super.processNode(node, prefix, container);
}
}
2.現在你只需要讓這個任務對螞蟻可見。最簡單的方法:在你有ant腳本的目錄中創建task
子目錄 - >將編譯好的MyXmlProp類與它的目錄結構拷貝到task
目錄,這樣你最終應該得到如下結果:task/pl/sobczyk/peter/MyXmlProp.class
。
3.導入任務Ant腳本,你應該像結束了:
<target name="print">
<taskdef name="myxmlproperty" classname="pl.sobczyk.piotr.MyXmlProp">
<classpath>
<pathelement location="task"/>
</classpath>
</taskdef>
<myxmlproperty file="config.xml" prefix="build"/>
<echo message="name = ${build.resources.string[id]}"/>
</target>
4.運行螞蟻,螞蟻瞧,你應該看到:[echo] name = id17
我們在這裏所做的是爲您的特定情況定義一個特殊的花式方括號語法:-)。對於一些更一般的解決方案任務擴展可能會更復雜一點,但一切皆有可能:)。祝你好運。
感謝您的詳細回覆。我會回覆結果。 – VARoadstter
正是我在找什麼! :) – splash