我有一个Java库的Ant构建文件。它看起来像这样:
<project ... ><target ... >
<jar destfile="C:pathtoexport.jar">
<manifest> ... </manifest>
<fileset dir="C:pathtobin" />
<fileset dir="C:pathtosrc" />
<fileset dir="C:pathtodoc" />
<zipfileset src="C:pathtoincludedlibrary.jar" />
</jar>
</target></project>
唯一的问题是我的JavaDoc被直接导出到生成的jar文件的根目录。从本质上讲,我想要一些相当于<copydir>
的命令,可以在<jar>
命令中使用。
我希望的结构是这样的:
export.jar
META-INF
Manifest.MF
com
example
whatever
Blah.class
Blah.java
org
external
somelibrary
Magic.class // contents of the included library jar file
doc
// javadoc files here
当前结构为:
export.jar
META-INF
Manifest.MF
com
example
whatever
Blah.class
Blah.java
// some javadoc files here
org
external
somelibrary
Magic.class // contents of the included library jar file
// more javadoc files here
我目前的"解决方案"是省略文档<fileset>
命令,然后,一旦jar导出,进入Windows资源管理器和右键单击 → 7 - zip →打开存档;然后我可以把doc
目录放到那里。然而,这完全违背了Ant作为一个完全自动化的构建系统的目的。
如果重要的话,这个文件最初是由Eclipse使用Runnable JAR导出器生成的。然而,我显然需要修改它来添加源文件等,因为它是一个库,而不是一个实际可运行的jar。我将它导出为一个可运行的jar,以便Eclipse将其打包到所需的库中;显然,构建路径上的库不可用于通过标准File &rarr导出; →JAR文件。
jar实际上类似于zip文件。因此您可以使用zipfileset
。它的属性prefix
就是你要找的。
zipfileset
命令可以通过src
接受zip文件,也可以通过dir
接受文件系统目录。使用后者,您可以添加以下命令:
<zipfileset dir="C:pathtodoc" prefix="doc" />
同样值得注意的是,zipfileset支持文件集的所有属性。因此,如果您只想在特定位置包含单个文件,您可以使用:
<zipfileset file="C:pathtodocfile.txt" prefix="doc" />
进一步阅读:http://ant.apache.org/manual/Types/zipfileset.html