如何在'war'任务中执行Ant路径映射?

elj*_*nso 3 java ant

我有几个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>
Run Code Online (Sandbox Code Playgroud)

我还有一个包含lib元素的'war'任务:

<lib dir="${src.dir}/jars">
  <patternset refid="common.jars"/>
  <patternset refid="web.jars"/>
     ...
</lib>
Run Code Online (Sandbox Code Playgroud)

但是,这样,我最终得到的WEB-INF/lib包含我的模式中的子目录:

WEB-INF/lib/external/castor-1.1.jar
WEB-INF/lib/external/...
Run Code Online (Sandbox Code Playgroud)

有没有办法压扁这个,所以JAR文件出现在WEB-INF/lib下的顶层,无论模式中指定的目录是什么?我看了看,mapper但似乎你不能在里面使用它们lib.

Tom*_*bel 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>
Run Code Online (Sandbox Code Playgroud)

  • 没有lib元素有点反直觉,但这很好.有一点需要重申,以防其他人不明白,<mappedresources>取代了<lib>.war任务是jar/zip任务的扩展,lib,classes,webinf和metainf元素都是Ant放置在生成的war文件中各自位置的FileSet.该解决方案省略了lib元素,并且"手动"将jar放置在WEB-INF/lib /中. (3认同)