需要ANT任务在最终jar的/ lib目录中包含一组jar文件

时间:2013-05-05 08:02:11

标签: java ant jar

我的项目文件夹中有一堆依赖的jar:

/lib/someapi-1.1.1/main.jar
/lib/someotherapi-2.2.2/api-2.2.2.jar
/lib/...

我构建了一个JAR文件,我的应用程序要求依赖的jar包含在jar中/ lib文件夹的最后一个jar中,所以最终的jar应该有一个类似的结构:

/org/me/myclasses.class
/lib/main.jar
/lib/api-2.2.2.jar

如何将/lib/*.jar文件展平为包含在我最终jar文件的/ lib目录中?


澄清

我本质上只是试图将一组资源文件展平并添加到我最后一个jar中的给定目录中。

2 个答案:

答案 0 :(得分:4)

我看到的最简单的方法是使用copy任务及其flatten属性将allyour jar复制到临时文件夹,并将此临时目录的jar包含到目标jar中。


由提问者添加的已添加详细信息

这是最终ANT目标的样子(供将来参考):

  <target name="dist">
    <mkdir dir="${classes}/lib"/>
    <copy flatten="true" todir="${classes}/lib" includeemptydirs="false">
        <fileset dir="lib">
            <include name="**/*.jar" />
        </fileset>
    </copy>
    <jar destfile="${dist}/MyOneBigJar.jar">
        <fileset dir="${classes}"/>
    </jar>
  </target>

答案 1 :(得分:4)

如果您想要跳过复制步骤,您可以这样做。它使用<mappedresources>从源lib目录展平到classes / lib区域。

<jar destfile="${dist}/MyOneBigJar.jar">
    <fileset dir="${classes}"/>
    <mappedresources>
      <fileset dir="lib">
          <include name="**/*.jar" />
      </fileset>
      <chainedmapper>
          <flattenmapper />
          <globmapper from="*" to="classes/lib/*" />
      </chainedmapper>
    </mappedresources>
</jar>