2009-02-05 55 views
20

我有一個項目需要訪問自己的JAR文件中的資源。當我爲該項目創建JAR文件時,我想將一個目錄複製到該JAR文件中(我猜等效的ZIP會將該目錄「添加」到現有的ZIP文件中)。我只希望在創建JAR之後發生副本(並且如果我清理並刪除JAR文件,我顯然不希望發生副本)。如何使用Ant將文件複製到現有的JAR中?

目前的build文件看起來像這樣:

<?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> 

一些構建任務是從另一個文件(共tasks.xml),我不能在這裏顯示調用。

+0

爲什麼不在創建JAR文件時添加資源?這就是我在構建中所做的,其中包含JAR文件,其中包含非代碼資源。 – Eddie 2009-02-05 22:23:20

+0

因爲爲創建JAR文件而定義的任務是在另一個我無法更改的文件中定義的。 – troyal 2009-02-05 22:27:54

+0

這會做到!好吧。我很高興別人用解決你問題的方式回答。 – Eddie 2009-02-05 22:32:28

回答

12

Jar/Ear Ant任務是更一般的Zip task的子任務。這意味着,你也可以在你的jar任務使用zipfileset

<jar destfile="${jar.file}" basedir="..."> 
    <zipfileset dir="${project.path}" includes="*.jar" prefix="libs"/> 
</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> 
4

一種方法是使用Ant任務:

  1. Unzip - 爆炸的Jar是一個臨時文件夾
  2. Copy - 到要到臨時文件夾中的文件夾複製,並
  3. Jar - 將'update'設置爲true,將temp文件夾打包回原始jar文件。

螞蟻Manual有如何做到這一點的例子。

17
<jar update="true"> 
... 
</jar> 
相關問題