2012-01-23 23 views
5

Chúng tôi sử dụng thuộc tính manifest của plugin java để viết các tệp MANIFEST.MF vào các đồ tạo tác jar của chúng tôi.Cách sử dụng API Manifest của Gradle để chèn tệp `MANIFEST.MF` vào thư mục gốc của tệp zip

Chúng tôi cũng sử dụng gradle để xây dựng các dự án GWT và kết quả chúng tôi đã xác định cho các dự án đó là zip. Tôi muốn bao gồm tệp MANIFEST.MF trong thư mục gốc của tệp zip đó.

Tôi đã thử sử dụng tác vụ type: Jar để tôi có thể sử dụng thuộc tính manifest của mình nhưng vấn đề, tất nhiên, là tệp kê khai được viết thành META-INF/MANIFEST.MF mà tôi không muốn. Lý do là chúng tôi giải nén tệp lưu trữ vào ứng dụng chính và tôi cần có thể tham chiếu tệp MANIFEST.MF khi chạy theo các mục đích bất chính của riêng tôi.

Vì vậy, ngay bây giờ các kho lưu trữ trông như thế này:

/gwtdirectory/ 
/gwtdirectory/file1 
/gwtdirectory/file2 
/gwtdirectory/... 
/gwtdirectory/filen 

Và tôi cần phải mất như thế này:

/gwtdirectory/ 
/gwtdirectory/MANIFEST.MF 
/gwtdirectory/file1 
/gwtdirectory/file2 
/gwtdirectory/... 
/gwtdirectory/filen 

Tôi đã nhận được thành công nó trông giống như:

/gwtdirectory/ 
/gwtdirectory/META-INF/MANIFEST.MF 
/gwtdirectory/file1 
/gwtdirectory/file2 
/gwtdirectory/... 
/gwtdirectory/filen 

Thông qua định nghĩa như:

task pack(type: Jar){ 
    manifest { 
    attributes(...) 
    } 
    extension = 'zip' 
    from gwt.destinationDir 
} 

Phương pháp writeTo trông có vẻ hứa hẹn, ngoại trừ tôi không thể tìm thấy triển khai giao diện mà tôi có thể sử dụng và tôi đang cố gắng tránh viết bằng văn bản của riêng mình.

Suy nghĩ?

+0

Tác vụ 'Jar' có' getManifest() 'trả về thực thi' Manifest'. Vì vậy, tôi đoán bạn sẽ có thể làm 'gói (loại: Jar) {manifest.writeTo (...)}'. – rodion

Trả lời

3

Nhìn vào Jar task, có vẻ như không thể định cấu hình vị trí của tệp kê khai.

Bạn có thể muốn sử dụng triển khai DefaultManifest của riêng mình để tạo tệp kê khai và sau đó bao gồm tệp này với from trong tệp zip của bạn.

Bạn có thể thử này:

import org.gradle.api.java.archives.internal.DefaultManifest 
import org.gradle.api.internal.file.IdentityFileResolver 

File manifestFile = file('build/myAwesomeManifest.mf') 

task generateManifest << { 
    manifest = new DefaultManifest(new IdentityFileResolver()) 

    // add some attributes 
    manifest.attributes(["attr1":"value1", "attr2":"value2"]) 

    // write it to a file 
    manifest.writeTo(manifestFile) 
} 
2

Tôi nghĩ rằng đó là chính xác những gì bạn đang tìm kiếm vào cuối this chapter từ Gradle bằng tay.

jar.manifest.writeTo("$buildDir/mymanifest.mf") 
+0

Tôi đã thử giải pháp trên nhưng không hiệu quả, bạn có thể thêm một số ví dụ không –

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