如何将union传递给war lib元素?

时间:2015-09-16 21:59:09

标签: ant war

我正在尝试重构一个ant build.xml文件以减少重复。以前该文件有一堆类似的目标:

<war ...>
    <lib dir=${lib}">
        <include name="foo.jar"/>
        <include name="bar.jar"/>
        <include name="qux.jar"/>
    </lib>
    ...
</war>

<jar ...>
    ...
    <manifest>
        <attribute name="Class-Path" value="foo.jar bar.jar baz.jar"/>
    </manifest>
</jar>

尽管有蚂蚁文档,我还是把它看起来更像是这样:

<fileset id="commonLibs1" dir="${lib}">
    <include name="foo.jar"/>
    <include name="bar.jar"/>
</fileset>

<union id="clientLibs">
    <fileset refid="commonLibs1"/>
    <fileset dir="${lib}">
        <include name="baz.jar"/>
    </fileset>
</union>

<war ...>
    <lib dir=${lib}">
        <include name="foo.jar"/>
        <include name="bar.jar"/>
        <include name="qux.jar"/>
    </lib>
    ...
</war>

<manifestclasspath property="tmpClassPath" jarfile="./placeholdername.jar">
    <classpath>
        <resources refid="clientLibs"/>
    </classpath>
</classpath>

<jar ...>
    ...
    <manifest>
        <attribute name="Class-Path" value="${tmpClasspath}"/>
    </manifest>
</jar>

哪个是膨胀的。现在我几乎达到了我的目标,即没有将所有这些jar名称复制到整个地方:

    <fileset id="commonLibs1" dir="${lib}">
    <include name="foo.jar"/>
    <include name="bar.jar"/>
</fileset>

<union id="clientLibs">
    <fileset refid="commonLibs1"/>
    <fileset dir="${lib}">
        <include name="baz.jar"/>
    </fileset>
</union>

<union id="serverLibs">
    <fileset refid="commonLibs1"/>
    <fileset dir="${lib}">
        <include name="qux.jar"/>
    </fileset>
</union>

<war ...>
    <lib refid="serverLibs"/>
    ...
</war>

<manifestclasspath property="tmpClassPath" jarfile="./placeholdername.jar">
    <classpath>
        <resources refid="clientLibs"/>
    </classpath>
</classpath>

<jar ...>
    ...
    <manifest>
        <attribute name="Class-Path" value="${tmpClasspath}"/>
    </manifest>
</jar>

可是:

build.xml:1067: serverLibs doesn't denote a zipfileset or a fileset

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:1)

lib的{​​{1}}嵌套元素只接受warfileset。不支持其他资源集合,例如zipfileset。您可以通过几种方法将其转换为union。如果需要将fileset保留在其他地方使用,那么您可以从中创建union元素并使用Ant-Contrib pathtofileset任务将其转换为{{1} }}:

path

或者您可以跳过Ant-Contrib,并将mappedresources与上面创建的fileset一起使用(有关示例,请参阅this post)。

一种更简单的方法(如果<union id="serverLibs"> <fileset refid="commonLibs1"/> <fileset dir="${lib}"> <include name="qux.jar"/> </fileset> </union> <path id="serverLibsPath"> <resources refid="serverLibs" /> </path> <pathtofileset pathrefid="serverLibsPath" name="serverLibsFileset" dir="${lib}" /> <war ...> <lib refid="serverLibsFileset"/> ... </war> 仅由path任务使用)是删除联合并仅指定多个union元素中的文件集组合:

war