Sự khác biệt giữa tất cả các dự án và tiểu dự án là gì


124

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

Câu hỏi liên quan: sự khác biệt giữa hai cú pháp là gì (thực sự đối với tất cả các dự án VÀ các dự án con):

subprojects {  ...
}

configure(subprojects) { ...
}

Khi nào bạn sẽ thay đổi cái khác?

Câu trả lời:


119

Trong một bản dựng gradle nhiều dự án, bạn có một dự án gốc và các dự án con. Sự kết hợp của cả hai là tất cả các dự án. RootProject là nơi bắt đầu xây dựng. Một mẫu phổ biến là rootProject không có mã và các dự án con là các dự án java. Trong trường hợp đó, bạn chỉ áp dụng plugin java cho các dự án con:

subprojects {
    apply plugin: 'java'
} 

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

Liên quan đến hai cú pháp, chúng làm điều tương tự. Cái đầu tiên trông đẹp hơn.


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ã"?
Marian Paździoch

6
Nó có thể có mã nhưng hầu hết thời gian nó chỉ để kết hợp tất cả các dự án con trong một dự án gốc duy nhất.
mallaudin

44

Thêm vào câu trả lời của Ryan, configurephương pháp này trở nên quan trọng khi bạn muốn định cấu hình các tập hợp con tùy chỉnh của các đố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 allprojectsvs. subprojectstù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 subprojects, vì trong nhiều bản dựng, dự án gốc không chứa bất kỳ mã nào. Mặt khác, các plugin Eclipse và IDEA 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 đó, subprojectstốt hơn allprojectslà miễn là nó mang lại kết quả mong đợi.


điều gì sẽ xảy ra nếu một số dự án phụ của tôi phụ thuộc vào bộ đệm giao thức? tôi có nên áp dụng proto-gradle-plugin trên tất cả không? hoặc phụ hoặc chỉ cho vài dự án trong phụ?
user1870400
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.