如何将Ant路径转换为FileSet?

Hen*_*aul 18 ant java-ee

我正在编写一个Ant脚本来将项目打包到WAR文件中.该软件包含几个具有自己的源目录,库等的项目.

WAR任务有一个lib我正在处理的嵌套元素.我目前有一个所需的库的引用作为一个Path(包含几个FileSets,我在类路径引用中使用.lib但是,希望输入是a FileSet,它拒绝一个Path.

我尝试将我转换Path为a FileSet,但后来我没有把它作为其他地方的类路径工作.

有没有办法将a转换PathFileSet?我不想复制粘贴目录.

<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上或者你想使它与平台无关,你可能需要用分隔符来解决一些问题.)


Ale*_*yak 8

你可能有几个选择.

  1. 您可以为 任务提供多个 <lib>嵌套元素<war>.也许这就足够了.
  2. 您可以lib在一个临时目录中预先组装所有 文件,然后将该目录作为文件集引用.
  3. 有一个ant-contrib PathToFileSet任务,但它需要一个中央根目录,这可能不是你的compile.libs布局的情况 .
  4. 从Ant 1.8.0开始,您可以使用mappedresources.来源:Ant脚本:防止在javac-classpath war-lib中重复JAR

我想我会尝试选项1.


Gur*_* GV 5

我通过分段这样的库解决了这个问题:

<copy todir="stage/libs" flatten="true">
<path refid="classpath" />
</copy>
Run Code Online (Sandbox Code Playgroud)

然后在WAR task.simple中使用。