5

我的项目文件夹中有一堆依赖的 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 中的给定目录中。

4

2 回答 2

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>
于 2013-05-05T08:56:53.063 回答
4

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


ADDED DETAIL 由询问者添加

这是最终的 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>
于 2013-05-05T08:22:55.933 回答