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

Dav*_*rks 5 java ant jar

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

/lib/someapi-1.1.1/main.jar
/lib/someotherapi-2.2.2/api-2.2.2.jar
/lib/...
Run Code Online (Sandbox Code Playgroud)

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

/org/me/myclasses.class
/lib/main.jar
/lib/api-2.2.2.jar
Run Code Online (Sandbox Code Playgroud)

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


澄清

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

mar*_*ton 5

如果您想跳过复制步骤,则可以采用这种方式。它用于<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>
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 4

我看到的最简单的方法是使用copy任务及其flatten属性将所有 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>
Run Code Online (Sandbox Code Playgroud)