我有一个Java库的Ant构建文件。看起来像这样:
<project ... ><target ... >
<jar destfile="C:\path\to\export.jar">
<manifest> ... </manifest>
<fileset dir="C:\path\to\bin" />
<fileset dir="C:\path\to\src" />
<fileset dir="C:\path\to\doc" />
<zipfileset src="C:\path\to\included\library.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打包到所需的库中;显然,构建路径上的库无法通过标准文件→导出→ JAR文件导出。
最佳答案
一个 jar 实际上就像一个zip文件。因此,您可以使用zipfileset
。它的属性prefix
是您要寻找的。zipfileset
命令可以通过src
接受zip文件,也可以通过dir
接受文件系统目录。使用后者,您可以添加以下命令:
<zipfileset dir="C:\path\to\doc" prefix="doc" />
另外值得一提的是zipfileset支持文件集的所有属性。因此,如果您只想在特定位置包含一个文件,则可以使用:
<zipfileset file="C:\path\to\doc\file.txt" prefix="doc" />
进一步阅读:http://ant.apache.org/manual/Types/zipfileset.html