如何使用Ant将文件复制到现有JAR中?

时间:2009-02-05 22:11:40

标签: ant jar

我有一个项目需要访问自己的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)调用的,我无法在此处显示。

3 个答案:

答案 0 :(得分:17)

<jar update="true">
...
</jar>

答案 1 :(得分:13)

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>

答案 2 :(得分:4)

一种方法是使用Ant任务:

  1. Unzip - 爆炸Jar是一个临时文件夹
  2. Copy - 将您想要的文件夹复制到临时文件夹,然后
  3. Jar - 将'update'设置为true,将temp文件夹打包回原始jar文件。
  4. Ant Manual提供了如何操作的示例。