我想创建一个具有以下目录结构的jar:
thejar.jar/
classes/ --> where all classes go
lib/ --> where all dependencies go
res/ --> where all non-classpath resources go (scripts, etc.)
META-INF/
这是我的蚂蚁任务:
<jar destfile="dist/main/thejar.jar">
<!-- Create the manifest -->
<manifest>
<!-- JAR should be sealed. -->
<attribute name="Sealed" value="true" />
</manifest>
<!-- Copy main build directory to classes/ directory in JAR. -->
<fileset dir="dist/main/classes" includes="build/main"/>
<!-- Copy main library directory to lib/ directory in JAR. -->
<fileset dir="dist/main/lib" includes="lib/main"/>
<!-- Copy main resources directory to res/ in JAR. -->
<fileset dir="dist/main/res" includes="res/main"/>
</jar>
如果我正确理解这一点,它应该是:
- 将
build/main
中的所有已构建(.class)文件复制到dist/main/classes
- 将所有
lib/main
依赖项复制到dist/main/lib
- 将所有
res/main
文件复制到dist/main/res
- JAR将
dist/main/*
分解为thejar.jar
JAR任务执行时没有错误,但当我查看thejar.jar
的内容时,我只看到META-INF/(没有我上面提到的子目录)。
这是怎么回事?提前感谢!
您希望jar
任务将build/main
中的文件复制到jar的dist/main/lib
中,但
<fileset dir="dist/main/classes" includes="build/main"/>
表示将dist/main/classes/build/main
中的文件打包到jar文件中。
看看Ant Jar任务文档中的示例:
<jar destfile="${dist}/lib/app.jar">
<fileset dir="${build}/classes"
excludes="**/Test.class"
/>
<fileset dir="${src}/resources"/>
</jar>
(上面的代码)将${build}/classes目录和${src}/resources目录中的所有文件一起放入${dist}/lib目录中一个名为app.jar的文件中。
为了实现您的请求,我认为您可以使用<copy>
任务将类、资源和依赖项复制到您想要的目录结构中,然后jar目录。