如何将联合传递给 war lib 元素?
How can I pass a union to the war lib element?
我正在尝试重构 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>
尽管有 ant 文档,我还是把它看成这样:
<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
有什么方法可以实现吗?
war
的 lib
嵌套元素只接受 fileset
或 zipfileset
。不支持 union
等其他资源集合。您可能有几种方法可以将其转换为 fileset
。如果 union
需要保留在其他地方使用,那么您可以从中创建一个 path
元素并使用 Ant-Contrib pathtofileset
任务将其转换为 fileset
:
<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>
或者您可以跳过 Ant-Contrib 并使用 mappedresources
with the path
created above (see this post 作为示例)。
一个更简单的方法(如果 union
仅被 war
任务使用)是删除并集并仅在多个 lib
元素中指定文件集的组合:
<war ...>
<lib refid="commonLibs1"/>
<lib dir="${lib}">
<include name="qux.jar"/>
</lib>
...
</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>
尽管有 ant 文档,我还是把它看成这样:
<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
有什么方法可以实现吗?
war
的 lib
嵌套元素只接受 fileset
或 zipfileset
。不支持 union
等其他资源集合。您可能有几种方法可以将其转换为 fileset
。如果 union
需要保留在其他地方使用,那么您可以从中创建一个 path
元素并使用 Ant-Contrib pathtofileset
任务将其转换为 fileset
:
<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>
或者您可以跳过 Ant-Contrib 并使用 mappedresources
with the path
created above (see this post 作为示例)。
一个更简单的方法(如果 union
仅被 war
任务使用)是删除并集并仅在多个 lib
元素中指定文件集的组合:
<war ...>
<lib refid="commonLibs1"/>
<lib dir="${lib}">
<include name="qux.jar"/>
</lib>
...
</war>