2014-07-21 16 views
7

chúng tôi có một thiết lập gradle đa dự án với một jar Java cho từng tiểu dự án:Sao chép tất cả tạo & bên thứ ba lọ vào một thư mục duy nhất với Gradle

- root-project 
    |-sub-project-a 
    |-sub-project-b 
    |-sub-project-c 

Bây giờ, bởi vì chúng ta đang tạo một ứng dụng webstart Java , chúng ta cần ký tất cả các lọ của dự án cũng như tất cả các thư viện của bên thứ ba (các phụ thuộc).

Cách tiếp cận của tôi bây giờ là sao chép tất cả các biểu mẫu con được xây dựng và tất cả thư viện của bên thứ ba vào một thư mục riêng biệt và thực hiện một nhiệm vụ để ký chúng. Tuy nhiên tôi không thể sao chép các lọ.

Đây là cách tiếp cận của tôi trong build.gradle root:

task copyFiles(type: Copy, dependsOn: subprojects.jar) { 
    from configurations.runtime 
    from("build/libs") 
    into("webstart/lib") 
    include('*.jar') 
} 

cùng với:

task signAll(dependsOn: [copyFiles]) << { 
    new File('webstart/signed').mkdirs() 
    def libFiles = files { file('webstart/lib').listFiles() } 
    ... 
} 

Sau đó, tôi đã cố gắng để thực hiện signAll gradle. Tuy nhiên, tôi chỉ có thể tìm thấy một bình rỗng với tên của dự án gốc trong thư mục webstart/lib.

Có thể cách tiếp cận của tôi hoàn toàn sai. Tôi phải làm gì để sao chép tất cả các lọ được tạo thành & vào bên trong một thư mục duy nhất?

Trả lời

10

Thêm đoạn mã này để build.gradle gốc và nó sẽ làm việc tốt:

allprojects { 
    apply plugin: 'java' 
    repositories { 
     mavenCentral() 
    } 
} 

task copyJars(type: Copy, dependsOn: subprojects.jar) { 
    from(subprojects.jar) 
    into project.file('dest') 
} 

task copyDeps(type: Copy) { 
    from(subprojects.configurations.runtime) 
    into project.file('dest/lib') 
} 

task copyFiles(dependsOn: [copyJars, copyDeps]) 
+3

Hi, cảm ơn cho câu trả lời, điều này làm việc tuyệt vời! Chỉ cần một điều: Bây giờ các lọ của tất cả các dự án của riêng tôi được chia sẻ được sao chép cả hai để dest và dest/lib. Ví dụ. nếu tiểu dự án-một requries tiểu dự án-b, sau đó tiểu dự án-b.jar được sao chép cả hai để dest và dest/lib. Bất kỳ cách nào để ngăn chặn các dự án chia sẻ được sao chép vào dest/lib? – Dominic

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