2013-05-28 62 views
5

Tôi có một tệp xây dựng Ant cho một thư viện Java. Có vẻ như sau:Làm cách nào để thay đổi thư mục đích của lệnh fileset của 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> 

Vấn đề duy nhất là JavaDoc của tôi đang được xuất trực tiếp vào thư mục gốc của tệp jar kết quả. Điều cần thiết, tôi muốn một số tương đương với lệnh <copydir> có thể được sử dụng bên trong lệnh <jar>.

cấu trúc của tôi mong muốn là thế này:

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 

Cấu trúc hiện nay là:

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 

My hiện "giải pháp" là để bỏ qua các lệnh tài liệu <fileset>, sau đó, khi jar đã xuất, đi vào Windows Explorer và nhấp chuột phải7-ZipMở Lưu trữ; Sau đó tôi có thể thả thư mục doc vào đó. Tuy nhiên, điều này khá hoàn toàn đánh bại mục đích của Ant như một hệ thống xây dựng hoàn toàn tự động.

Nếu nó quan trọng, tệp này ban đầu được tạo bởi Eclipse với nhà xuất khẩu JAR Runnable. Tuy nhiên, tôi rõ ràng cần phải sửa đổi nó để thêm các tệp nguồn, v.v ... vì nó là một thư viện và không thực sự là một cái bình runnable. Tôi đã xuất khẩu nó như là một jar có thể chạy được để đưa Eclipse vào gói trong các thư viện cần thiết; dường như các thư viện trên đường dẫn xây dựng không có sẵn để xuất qua tiêu chuẩn TệpXuấtTệp JAR.

Trả lời

10

Bình thực sự giống như một tệp zip. Do đó bạn có thể sử dụng zipfileset. Thuộc tính của nó prefix là những gì bạn đang tìm kiếm.

Lệnh zipfileset có thể chấp nhận tệp zip qua src hoặc thư mục hệ thống tệp qua dir. Sử dụng sau, bạn có thể thêm lệnh sau:

<zipfileset dir="C:\path\to\doc" prefix="doc" /> 

Cũng đáng lưu ý là zipfileset hỗ trợ tất cả các thuộc tính của fileset. Vì vậy, nếu bạn muốn bao gồm chỉ là một tập tin duy nhất tại một địa điểm cụ thể mà bạn có thể sử dụng:

<zipfileset file="C:\path\to\doc\file.txt" prefix="doc" /> 

Đọc thêm: http://ant.apache.org/manual/Types/zipfileset.html

+0

Tôi biết rằng một jar sử dụng nén zip. Tuy nhiên, thư mục 'doc' của tôi không phải là một tệp nén, chỉ là một thư mục. theo Eclipse, không có thuộc tính 'prefix' trên lệnh' fileset'. – wchargin

+1

'zipfileset' có thể được sử dụng theo hai cách. Một như một tập tin trong một tập tin zip. Một như là một tập tin để được bao gồm trong một zip (hoặc một cái lọ, điều này là như nhau). Điều cuối cùng là dành cho trường hợp sử dụng của bạn. Đọc các dòng đầu tiên của tài liệu mà tôi đã chỉ ra trong câu trả lời của mình. –

+0

Cảm ơn! Nếu bạn không nhớ tôi sẽ chỉnh sửa câu trả lời của bạn để bao gồm một mẫu mã. – wchargin

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