【问题标题】:How do I copy files into an existing JAR with Ant?如何使用 Ant 将文件复制到现有的 JAR 中?
【发布时间】:2010-10-05 19:34:24
【问题描述】:

我有一个项目需要访问其自己的 JAR 文件中的资源。当我为项目创建 JAR 文件时,我想将一个目录复制到该 JAR 文件中(我猜 ZIP 等效项是将目录“添加”到现有 ZIP 文件中)。我只希望在创建 JAR 之后发生副本(如果我清理并删除 JAR 文件,我显然不希望发生副本)。

目前构建文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project name="foobar" basedir=".." default="jar">

    <!-- project-specific properties -->
    <property name="project.path" value="my/project/dir/foobar" />

    <patternset id="project.include">
        <include name="${project.path}/**" />
    </patternset>
    <patternset id="project.jar.include">
        <include name="${project.path}/**" />
    </patternset>

    <import file="common-tasks.xml" />

    <property name="jar.file" location="${test.dir}/foobar.jar" />    
    <property name="manifest.file" location="misc/foobar.manifest" />
</project>

一些构建任务是从另一个文件 (common-tasks.xml) 中调用的,这里我无法显示。

【问题讨论】:

  • 为什么不在创建 JAR 文件时添加资源?这就是我在其中包含包含非代码资源的 JAR 文件的构建中所做的。
  • 因为为创建 JAR 文件而定义的任务是在另一个我无法更改的文件中定义的。
  • 这样就行了!那好吧。我很高兴其他人以解决您问题的方式回答。

标签: ant jar


【解决方案1】:
<jar update="true">
...
</jar>

【讨论】:

  • 我不确定“...”中的实际内容
【解决方案2】:

Jar/Ear Ant 任务是更通用的Zip task 的子任务。这意味着你也可以在你的 Jar 任务中使用zipfileset

<jar destfile="${jar.file}" basedir="...">
    <zipfileset dir="${project.path}" includes="*.jar" prefix="libs"/>
</jar>

我还看到您定义了一个单独的清单文件以包含在 Jar 中。您还可以使用嵌套的manifest 命令:

<jar destfile="@{destfile}" basedir="@{basedir}">
    <manifest>
        <attribute name="Built-By" value="..."/>
        <attribute name="Built-Date" value="..."/>

        <attribute name="Implementation-Title" value="..."/>
        <attribute name="Implementation-Version" value="..."/>
        <attribute name="Implementation-Vendor" value="..."/>
    </manifest>
</jar>

【讨论】:

    【解决方案3】:

    一种方法是使用 Ant 任务:

    1. Unzip - 爆炸 Jar 是一个临时文件夹
    2. Copy - 将您想要的文件夹复制到临时文件夹,并且
    3. Jar - 'update' 设置为 true,将 temp 文件夹打包回原始 jar 文件。

    Ant Manual 提供了如何做到这一点的示例。

    【讨论】:

    • 如果可能的话,我想避免这种方法。我已经看到了一种做我想做的事情的方法,但我记不起细节了。
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2011-04-19
    • 2012-05-05
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多