代码之家  ›  专栏  ›  技术社区  ›  eljenso

如何在“war”任务中执行ant路径映射?

  •  3
  • eljenso  · 技术社区  · 14 年前

    我有几个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 .

    2 回复  |  直到 14 年前
        1
  •  4
  •   martin clayton egrunin    14 年前

    您可以尝试使用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只包含运行时所需的库。这样可以避免冲突,而且对于其他开发人员来说,您的项目看起来会更清晰。

        2
  •  9
  •   Tomer Gabel    13 年前

    我不满意必须手动生成一个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>