【问题标题】:How do I change the destination directory of Ant's fileset command?如何更改 Ant 文件集命令的目标目录?
【发布时间】:2013-05-22 22:44:25
【问题描述】:

我有一个用于 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 文件的根目录中。本质上,我想要可以在 &lt;jar&gt; 命令中使用的 &lt;copydir&gt; 命令的等效项。

我想要的结构是这样的:

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

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

如果重要的话,这个文件最初是由 Eclipse 使用 Runnable JAR 导出器生成的。但是,我显然需要对其进行修改以添加源文件等,因为它是一个库,实际上并不是一个可运行的 jar。我将它导出为一个可运行的 jar,让 Eclipse 打包到所需的库中;显然,构建路径上的库无法通过标准 File → Export → JAR file 导出。

【问题讨论】:

    标签: java eclipse deployment ant jar


    【解决方案1】:

    jar 实际上就像一个 zip 文件。因此,您可以使用zipfileset。它的属性prefix 就是你要找的。​​p>

    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

    【讨论】:

    • 我知道 jar 使用 zip 压缩。但是,我的 doc 文件夹不是 zip 文件,只是一个文件夹。根据 Eclipse,fileset 命令上没有属性prefix。
    • zipfileset 有两种使用方式。一个作为 zip 文件中的文件集。一个作为要包含在 zip(或 jar,这是相同的)中的文件集。最后一个适用于您的用例。阅读我在回答中指出的文档的第一行。
    • 谢谢!如果您不介意,我会编辑您的答案以包含代码示例。
    猜你喜欢
    • 2011-04-23
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2013-07-19
    相关资源
    最近更新 更多