【发布时间】:2015-07-13 14:23:55
【问题描述】:
我有 5 个项目的相同源代码,我想在 ANT 中使用相同的构建文件构建每个项目。我想使用每个项目的名称来构建代码。
【问题讨论】:
我有 5 个项目的相同源代码,我想在 ANT 中使用相同的构建文件构建每个项目。我想使用每个项目的名称来构建代码。
【问题讨论】:
我建议您在名为“DEV”和“PROD”的 build.xml 文件中定义目标,然后调用 Ant:
蚂蚁开发 或
蚂蚁产品 如果您想坚持当前使用系统属性选择目标的方法,那么@krock 的答案似乎是要走的路。 (但我认为这种方法没有任何优势。)
【讨论】:
使用您的项目名称定义用户属性:
ant -f build.xml -Dprojectname=foobar
并在您的构建文件中使用它:
<project>
<echo>$${projectname} => ${projectname}</echo>
<!-- the real work ... -->
</project>
输出:
[echo] ${projectname} => foobar
-- 编辑--
你可以使用某种循环,f.e. :
ant -f build.xml -Dprojectnames=project1,project2,project3
将您的步骤(结帐、编译...)包装在一个宏定义中并为每个项目调用它:
<project>
<macrodef name="foobar">
<attribute name="projectname"/>
<sequential>
<echo>Projectname : @{projectname}</echo>
<!-- the real work -->
</sequential>
</macrodef>
<script language="javascript">
<![CDATA[
var projects = project.getProperty('projectnames').split(',');
for (i=0; i < projects.length; i++) {
macro = project.createTask('foobar');
macro.setDynamicAttribute('projectname', projects[i]);
macro.perform();
}
]]>
</script>
</project>
输出:
[echo] Projectname : project1
[echo] Projectname : project2
[echo] Projectname : project3
您也可以创建 ant 目标而不是 macrodef。
Javascript 引擎包含在 Java >= 1.6.0_06 中,因此不需要额外的库。
还有更复杂的方法,f.e.使用包含您的项目名称的 xmlproperty 文件与 xmltask (= xmldriven build) 结合使用,该文件通过 xpath 表达式提供一些循环机制。
这取决于您的构建脚本的复杂性。
【讨论】: