我正在编写一个Ant脚本来将项目打包到WAR文件中.该软件包含几个具有自己的源目录,库等的项目.
WAR任务有一个lib我正在处理的嵌套元素.我目前有一个所需的库的引用作为一个Path(包含几个FileSets,我在类路径引用中使用.lib但是,希望输入是a FileSet,它拒绝一个Path.
我尝试将我转换Path为a FileSet,但后来我没有把它作为其他地方的类路径工作.
有没有办法将a转换Path成FileSet?我不想复制粘贴目录.
<path id="compile.libs">
<fileset dir="${common.path}/lib" includes="*.jar"/>
<fileset dir="${data.path}/lib" includes="*.jar"/>
<fileset dir="${gui.path}/lib" includes="*.jar"/>
<fileset dir="${gui.path}/WebContent/WEB-INF/lib" includes="*.jar"/>
</path>
Run Code Online (Sandbox Code Playgroud)
...当与<war ..><../> <lib refid="compile.libs"/> </war>导致使用时:
BUILD FAILED build.xml:173: compile.libs doesn't denote a zipfileset or a fileset
Dav*_*les 14
假设路径是绝对的,您可以先使用转换Path为逗号分隔的列表<pathconvert>,然后将列表转换回Fileset:
<!-- create path -->
<path id="foo.path">
<pathelement location="/foo/bar/baz.txt"/>
<pathelement location="/qux/quux/quuux.txt"/>
</path>
<!-- convert foo.path to foo.list -->
<pathconvert
refid="foo.path"
property="foo.list"
pathsep=","
dirsep="/"
>
<!--
<fileset> will want relative paths, so we need to strip
the leading /. result: "foo/bar/baz.txt,qux/quux/quuux.txt"
-->
<map from="/" to=""/>
</pathconvert>
<!-- convert foo.list to fileset -->
<fileset id="foo.fileset" dir="/" includes="${foo.list}"/>
Run Code Online (Sandbox Code Playgroud)
(注意上面假设是Unix;如果你在Windows上或者你想使它与平台无关,你可能需要用分隔符来解决一些问题.)
你可能有几个选择.
<lib>嵌套元素<war>.也许这就足够了.lib在一个临时目录中预先组装所有
文件,然后将该目录作为文件集引用.compile.libs布局的情况
.我想我会尝试选项1.
我通过分段这样的库解决了这个问题:
<copy todir="stage/libs" flatten="true">
<path refid="classpath" />
</copy>
Run Code Online (Sandbox Code Playgroud)
然后在WAR task.simple中使用。