我有一堆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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top