我有几个JAR文件模式集,比如
<patternset id="common.jars">
<include name="external/castor-1.1.jar" />
<include name="external/commons-logging-1.2.6.jar" />
<include name="external/itext-2.0.4.jar" />
...
</patternset>
我还有一个包含lib元素的'war'任务:
<lib dir="${src.dir}/jars">
<patternset refid="common.jars"/>
<patternset refid="web.jars"/>
...
</lib>
然而,就像这样,我最终得到了包含我的模式子目录的WEB-INF / lib:
WEB-INF/lib/external/castor-1.1.jar
WEB-INF/lib/external/...
有没有办法压扁这个,所以无论模式中指定的目录是什么,JAR文件都出现在WEB-INF / lib下的顶层?我看了mapper
,但似乎你无法在lib
内使用它们。
答案 0 :(得分:9)
我不满意必须手动生成WAR目录或声明库子目录,所以我想出了这个。似乎工作,显然你需要根据自己的需要进行调整:
<war destfile="build/output.war" webxml="${web.dir}/WEB-INF/web.xml">
<fileset dir="${web.dir}" />
<mappedresources>
<fileset dir="${lib.dir}" includes="**/*.jar" />
<chainedmapper>
<flattenmapper/>
<globmapper from="*.jar" to="WEB-INF/lib/*.jar" />
</chainedmapper>
</mappedresources>
</war>
答案 1 :(得分:4)
您可以尝试使用mappedresources元素(Ant 1.8+)
<mappedresources>
<!-- Fileset here -->
<globmapper from="external/*.jar" to="*.jar"/>
</mappedresources>
http://ant.apache.org/manual/Types/resources.html#mappedresources
如果您有一个典型的Web项目,最好将Web应用程序库和通用库拆分到不同的文件夹中,并使WEB-INF / lib只包含运行时所需的那些。通过这种方式,您可以避免冲突,并且您的项目对其他开发人员来说也会更加清晰。