【发布时间】:2010-12-10 16:02:00
【问题描述】:
我有一堆构建插件的 ant 项目,它们都符合相同的 API。这些插件包含了它们所依赖的第三方库,因此它们是自包含的。由于各个构建脚本中的大部分行为都是相似的,因此我决定将公共部分提取到一个公共构建脚本中。
最初的构建脚本如下所示:
ProjectA/build.xml:
<project name="ProjectA" basedir=".">
...
<target name="jar">
<jar destfile="${project.target}" manifest="manifest.mf">
<fileset dir="${project.build.bin.dir}" />
<zipfileset src="externlib1.jar" />
<zipfileset src="externlib2.jar" />
</jar>
</target>
...
</project>
ProjectB/build.xml:
<project name="ProjectB" basedir=".">
...
<target name="jar">
<jar destfile="${project.target}" manifest="manifest.mf">
<fileset dir="${project.build.bin.dir}" />
<zipfileset src="externlib2.jar" />
<zipfileset src="externlib3.jar" />
</jar>
</target>
...
</project>
这是重构后我的构建脚本的样子:
Common.xml:
<project name="Common" basedir=".">
...
<target name="jar">
<jar destfile="${project.target}" manifest="common-manifest.mf">
<fileset dir="${project.build.bin.dir}" />
<zipfileset refid="extern.libs" />
</jar>
</target>
...
</project>
ProjectA/build.xml:
<project name="ProjectA" basedir=".">
...
<zipfileset id="extern.libs">
<file file="externlib1.jar" />
<file file="externlib2.jar" />
</zipfileset>
...
<import file="../common.xml" />
</project>
ProjectB/build.xml:
<project name="ProjectB" basedir=".">
...
<zipfileset id="extern.libs">
<file file="externlib2.jar" />
<file file="externlib3.jar" />
</zipfileset>
...
<import file="../common.xml" />
</project>
但是,重构后的构建不起作用-我认为问题在于我无法声明具有多个文件的 zipfileset。
我想不出一种方法可以声明一个文件集,以使公共 jar 任务的行为与在每个项目的构建脚本中声明 jar 任务的行为相同。以前有没有人解决过这个问题?有没有不同的方法可以完成同样的事情?
【问题讨论】: