2012-08-22 44 views
65

Khi xây dựng một dự án đa cấp, ai đó có thể cho tôi biết chính xác sự khác biệt giữa phần "allprojects" và "dự án con" là gì? Chỉ cần thư mục chính? Có ai sử dụng cả hai? Nếu vậy, bạn có quy tắc chung nào xác định những gì thường được đặt trong mỗi quy tắc không?Sự khác nhau giữa tất cả các dự án và tiểu dự án là gì

câu hỏi liên quan: sự khác biệt giữa hai cú pháp (thực sự cho allprojects VÀ tiểu dự án) là gì:

subprojects { ... 
} 

configure(subprojects) { ... 
} 

Khi nào bạn một trong khác không?

Trả lời

64

Trong bản dựng gradle đa dự án, bạn có rootProject và tiểu dự án. Sự kết hợp của cả hai là tất cả các dự án. RootProject là nơi xây dựng được bắt đầu từ. Một mẫu chung là rootProject không có mã và các tiểu dự án là các dự án java. Trong trường hợp đó, bạn áp dụng plugin java cho các tiểu dự án:

subprojects { 
    apply plugin: 'java' 
} 

Điều này tương đương với dự án tổng hợp maven chỉ xây dựng các mô-đun phụ.

Liên quan đến hai cú pháp, chúng thực hiện chính xác điều tương tự. Cái đầu tiên trông đẹp hơn.

+0

Tôi đang cố gắng hiểu câu trả lời của bạn và tại sao người ta muốn "rootProject không có mã"? –

+1

Nó có thể có mã nhưng * phần lớn thời gian * nó chỉ là để kết hợp tất cả các dự án phụ trong một dự án gốc duy nhất. – mallaudin

+1

Anh chàng này xây dựng. –

33

Thêm vào câu trả lời của Ryan, phương pháp configure trở nên quan trọng khi bạn muốn định cấu hình tập con tùy chỉnh của đối tượng. Ví dụ: configure([project(":foo"), project(":bar")]) { ... } hoặc configure(tasks.matching { it.name.contains("foo") }) { ... }.

Khi nào sử dụng allprojects so với subprojects tùy thuộc vào hoàn cảnh. Thường thì bạn sẽ sử dụng cả hai. Ví dụ: các plugin liên quan đến mã như plugin Java thường được áp dụng cho subprojects, bởi vì trong nhiều bản dựng, dự án gốc không chứa bất kỳ mã nào. Các trình cắm thêm Eclipse và IDEA, mặt khác, thường được áp dụng cho allprojects. Nếu nghi ngờ, hãy xem các ví dụ và các bản dựng và/hoặc thử nghiệm khác. Mục tiêu chung là tránh cấu hình không liên quan. Theo nghĩa đó, subprojects tốt hơn allprojects miễn là nó mang lại kết quả mong đợi.

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