我正在尝试在ANT中执行以下操作,但我被卡住了。
读取项目工作区中安装的项目。
workspace
buildtools
build.xml
project1
build.xml
project.name = "project1"
IP = "44.55.66.77"
SERVER_NAME = "project1.local"
DOCUMENT_ROOT = "c:\inetpub\project1"
project2
build.xml
project.name = "project2"
IP = "44.55.66.77"
SERVER_NAME = "project2.local"
DOCUMENT_ROOT = "c:\inetpub\project2"
....
为每个项目创建一个Apache virtualhost指令。
<VirtualHost 44.55.66.77>
DocumentRoot "c:\inetpub\project1"
ServerName project1.local
</VirtualHost>
<VirtualHost 44.55.66.77>
DocumentRoot "c:\inetpub\project2"
ServerName project2.local
</VirtualHost>
....
将virtualhost指令连接到Apache配置文件中。
我花了很多时间研究我可以使用的不同任务。 Concat,loadproperties,fileset,filterreaders等。我对所有的可能性和我的头脑旋转感到不知所措。
以下是我对如何做到这一点的可怕猜测:
<concat destfile={$apache.config.file}>
<fileset>
<include name="**/build.xml"/>
<loadproperties resource="fileset.item.project.name???"/>
<filterchain>
<replacetokens>
<token key="IP"
value="${p.IP}"/>
<token key="DOCUMENT_ROOT"
value="${p.DOCUMENT_ROOT}"/>
<token key="SERVER_NAME"
value="${p.SERVER_NAME}"/>
</replacetokens>
</filterchain>
</fileset>
<concat>
感谢您的帮助!
答案 0 :(得分:0)
我认为基本上你不应该将包含属性的build.xml文件作为标准属性文件加载,因为它们不是属性文件(我的意思是key =每行文件的值)。如果你需要它们,你应该导入它们。
我建议您使用Groovy代码段执行此类操作。
<!-- this is only a sketch, not a working solution -->
<path id="gr">
<pathelement location="/path/to/groovy-all.jar"/>
</path>
<taskdef name="groovy"
classname="org.codehaus.groovy.ant.Groovy"
classpathref="gr"/>
<groovy>
def b1 = new XmlParser().parse(new File("project1/build.xml")));
def b2 = new XmlParser().parse(new File("project2/build.xml")));
def f = new File("output.xml");
def ip1 = b2.property.find { it.name == 'IP'}.text();
def ip2 = ..
// get out all the stuff you need from the build.xml files with GPath
f.write("<VirtualHost ${ip1}>");
f.write(" DocumentRoot ${r1}");
f.write(" ServerName ${s1}");
f.write("<VirtualHost>");
</groovy>