题
我有一堆ant项目构建了所有符合相同API的插件。这些插件包含了它们所依赖的第三方库,因此它们是独立的。由于各个构建脚本中的大部分行为都很相似,因此我决定将公共部分提取到一个公共构建脚本中。
原始构建脚本看起来像这样:
项目A / 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>
项目B / 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>
项目A / build.xml中:
<project name="ProjectA" basedir=".">
...
<zipfileset id="extern.libs">
<file file="externlib1.jar" />
<file file="externlib2.jar" />
</zipfileset>
...
<import file="../common.xml" />
</project>
项目B / 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任务的行为相同。有人解决过这个问题吗?有没有不同的方法可以完成同样的事情?
解决方案
它有点繁琐,但 jar
任务的 zipgroupfileset
可能会有所帮助。
ProjectA的这样的东西应该可行。我已经猜到了这个目录,并根据需要进行调整。
<fileset dir="${project.build.lib.dir}" id="extern.libs">
<include name="externlib1.jar" />
<include name="externlib2.jar" />
</fileset>
然后在common.xml文件中,我重命名了你的common-manifest.mf。
<target name="jar">
<jar destfile="${project.target}" duplicate="preserve" manifest="common-manifest.mf">
<zipgroupfileset refid="extern.libs"/>
</jar>
</target>
不隶属于 StackOverflow