我正在尝试重构一个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
有没有办法让这项工作?
答案 0 :(得分:1)
lib
的{{1}}嵌套元素只接受war
或fileset
。不支持其他资源集合,例如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