我正在编写一个Ant脚本来将项目打包到WAR文件中。该软件包含几个具有自己的源目录,库等的项目。
WAR任务有一个我正在处理的嵌套元素lib
。我目前将所需的库引用为Path
(包含几个FileSets
,我在类路径引用中使用。lib
希望输入为{{{ 1}},它拒绝FileSet
。
我尝试将Path
转换为Path
,但后来我没有把它作为其他地方的类路径工作。
有没有办法将FileSet
转换为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>
一起使用时会导致:
BUILD FAILED build.xml:173: compile.libs doesn't denote a zipfileset or a fileset
答案 0 :(得分:13)
假设路径是绝对路径,您可以先使用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}"/>
(注意上面假设是Unix;如果您使用的是Windows,或者您希望使其与平台无关,那么您可能需要对分隔符进行一些操作。
答案 1 :(得分:8)
您可能有多种选择。
<lib>
嵌套元素<war>
任务。也许这就足够了。lib
个文件在一个临时文件中
目录,然后只是引用它
目录作为文件集。compile.libs
布局。我想我会尝试选项1。
答案 2 :(得分:4)
我通过暂存这样的lib来解决这个问题:
<copy todir="stage/libs" flatten="true">
<path refid="classpath" />
</copy>
然后在WAR task.simple中使用a。
答案 3 :(得分:-1)
用于编译的类路径中的jar与需要在war中打包的不一样。例如:我确定你需要 servlet-api.jar 来编译你的项目,但你不需要在战争中使用它,因为容器提供了它。编译时不需要一些罐子,但在运行时不需要 我知道我没有回答你的问题,只是想让你想想你在做什么。