2009-02-05 28 views
20

Tôi có một dự án cần truy cập tài nguyên trong tệp JAR của riêng mình. Khi tôi tạo tệp JAR cho dự án, tôi muốn sao chép một thư mục vào tệp JAR đó (tôi đoán tương đương ZIP sẽ là "thêm" thư mục vào tệp ZIP hiện có). Tôi chỉ muốn bản sao xảy ra sau khi JAR đã được tạo (và rõ ràng là tôi không muốn bản sao xảy ra nếu tôi xóa và xóa tệp JAR).Làm cách nào để sao chép các tệp vào một JAR hiện có với Ant?

Hiện nay việc xây dựng tập tin trông như thế này:

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

Một số trong những nhiệm vụ xây dựng được gọi là từ file khác (chung tasks.xml), mà tôi không thể hiển thị ở đây.

+0

Tại sao bạn không thêm tài nguyên tại thời điểm bạn tạo tệp JAR? Đó là những gì tôi làm trong các bản dựng mà tôi có các tệp JAR bao gồm các tài nguyên không mã bên trong chúng. – Eddie

+0

Do tác vụ được xác định để tạo tệp JAR được xác định trong tệp khác mà tôi không thể thay đổi. – troyal

+0

Điều đó sẽ làm được! Oh well. Tôi rất vui vì những người khác đã trả lời theo những cách giải quyết vấn đề của bạn. – Eddie

Trả lời

12

Nhiệm vụ Jar/Ear Ant là nhiệm vụ của tổng quát hơn Zip task. Điều này có nghĩa rằng bạn cũng có thể sử dụng trong nhiệm vụ zipfileset Jar của bạn:

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

Tôi cũng đã nhìn thấy mà bạn xác định một file manifest riêng để đưa vào Jar. Bạn cũng có thể sử dụng lệnh lồng nhau 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

Một cách là sử dụng các nhiệm vụ Ant:

  1. Unzip - bùng nổ các Jar được một thư mục tạm thời
  2. Copy - để sao chép các thư mục mà bạn muốn vào thư mục temp, và
  3. Jar - với 'cập nhật' được đặt thành true, để đóng gói thư mục tạm thời trở lại tệp jar gốc.

Ant Manual có các ví dụ về cách thực hiện.

+0

@Handerson: Yeap +1 – OscarRyz

+0

Tôi muốn tránh phương pháp này nếu có thể. Tôi đã nhìn thấy một cách để làm những gì tôi muốn, nhưng tôi không thể nhớ lại các chi tiết. – troyal

17
<jar update="true"> 
... 
</jar> 
+5

Tôi không chắc chắn những gì thực sự đi trong "..." – troyal

Các vấn đề liên quan