如何更改Ant的fileset命令的目标目录?

wch*_*gin 6 java eclipse ant deployment jar

我有一个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>
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我的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
Run Code Online (Sandbox Code Playgroud)

目前的结构是:

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
Run Code Online (Sandbox Code Playgroud)

我当前的"解决方案"是省略文档<fileset>命令,然后,一旦jar导出,进入Windows资源管理器并右键单击7-Zip打开存档 ; 然后,我可以将doc目录放在那里就好了.但是,这完全违背了Ant作为完全自动化构建系统的目的.

如果重要,此文件最初由Eclipse与Runnable JAR导出器生成.但是,我显然需要修改它来添加源文件等,因为它是一个库而不是实际上是一个可运行的jar.我将它导出为可运行的jar,以使Eclipse在所需的库中打包; 显然,构建路径上的库不能通过标准文件导出JAR文件导出.

小智 11

jar实际上就像一个zip文件.因此你可以使用zipfileset.它的属性prefix就是你要找的东西.

zipfileset命令可以接受zip文件src或文件系统目录dir.使用后者,您可以添加以下命令:

<zipfileset dir="C:\path\to\doc" prefix="doc" />
Run Code Online (Sandbox Code Playgroud)

另外值得注意的是,zipfileset支持fileset的所有属性.因此,如果您只想在特定位置包含单个文件,则可以使用:

<zipfileset file="C:\path\to\doc\file.txt" prefix="doc" />
Run Code Online (Sandbox Code Playgroud)

进一步阅读:http://ant.apache.org/manual/Types/zipfileset.html