2013-06-11 31 views
8

Cố gắng để có được đầu của tôi xung quanh nếu có thể sử dụng Công việc từ các dự án khác trong Gradle. Hãy nói rằng ProjectB là một dự án với src/main/groovy chứa com.MyTask, có mẹ PROJECTASự phụ thuộc vào dự án trong buildscript

Trong build.gradle trong ProjectC, cũng có cha mẹ PROJECTA:

buildscript { 
    dependencies{ 
     project(':ProjectB') 
    } 
} 

Đó có vẻ là hợp pháp, bởi vì introdusing một lỗi đánh máy trong "dự án (: 'ProjectB')" không cứng. Điều gì cũng không thành công là giới thiệu dòng này:

import com.MyTask 

Tham chiếu dự án không hợp lệ trong việc đóng bản dựng? Cũng cố gắng di chuyển com.MyTask để xây dựngSrc/src/main/groovy với cùng một lượng thành công.

Trả lời

4

Giải pháp làm việc cho tôi là "com.MyTask" có sẵn ở cả cấu hình và nguồn. PROJECTA (công ty mẹ) có này thêm vào sourceSets buildSrc/build.gradle của:

sourceSets{ 
    main{ 
     groovy{ 
      srcDir 'ProjectB/src/main/groovy' 
     } 
    } 
} 

Bây giờ ProjectC và tất cả các dự án khác có thể sử dụng MyTask. Đồng thời nó được đóng gói với jar cuối cùng của ProjectB.

Vấn đề này cũng đã được thảo luận kỹ lưỡng giữa giữa Adam Murdoch, Luke Daley và Steve Ebersole: http://gradle.1045684.n5.nabble.com/buildSrc-as-a-regular-project-td5677255.html

Chỉnh sửa: Đó là thông minh hơn chế tác cha mẹ buildSrc so với dự án độc lập. Bằng cách đó IntelliJ là hạnh phúc-đi-may mắn.

+0

"IntelliJ không thích nó "haha, không, tôi cá là không. –

+0

Haha! Xin lỗi vì đã chỉnh sửa câu trả lời giống như bạn đã nhận xét @ mike-rylander! – judoole

+0

Cảm ơn bạn đã tìm cách làm cho IntelliJ hạnh phúc. –

0

Từ tài liệu Gradle 15.4. Adding dependencies to a task:

Ví dụ 15.13. Thêm sự phụ thuộc vào nhiệm vụ từ một dự án khác

build.gradle 

project('projectA') { 
    task taskX(dependsOn: ':projectB:taskY') << { 
     println 'taskX' 
    } 
} 

project('projectB') { 
    task taskY << { 
     println 'taskY' 
    } 
} 
+0

Cuộc gọi tốt! Nhưng tôi có thể không nói rõ vấn đề. Nó không được định nghĩa các nhiệm vụ mà tôi muốn sử dụng, đó là Task được tạo trên classpath. Ví dụ xuất ProjectC sang mavenLocal() và nhập nó vào ProjectB trong buildscript hoạt động tốt. Sau đó, MyTask có sẵn. – judoole

+0

Cũng cố gắng xác định một "MyTask" tại ProjectC và dependOn trong ProjectB, nhưng tôi đã không thể là "MyTask" là trong src/main/gradle và không phải trong buildSrc/src/main/gradle. – judoole

+0

@ OleChristianLangfjæran bạn đã xem ch 15.2 chưa? bạn đã thử 'tasks.getByPath ('MyTask')' –

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