【问题标题】:Common jar task in ant build scriptant构建脚本中的常见jar任务
【发布时间】: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 任务的行为相同。以前有没有人解决过这个问题?有没有不同的方法可以完成同样的事情?

【问题讨论】:

    标签: ant build jar


    【解决方案1】:

    这有点繁琐,但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>
    

    【讨论】:

    • 感谢您的建议,但我认为它不起作用 - zipfileset 中包含的 jar 都没有扩展为最终的项目 jar。如果我使用
    • @iboisver - 我已经修改了它。那里错过了一些基本的东西 - 道歉。我已经对此进行了测试,它看起来对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多