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