Tôi đang di chuyển một dự án Java từ Ant sang Gradle. Tôi nghĩ giải pháp tốt nhất là sử dụng hỗ trợ đa dự án của Gradle, nhưng tôi không thể tìm ra cách để loại bỏ sự phụ thuộc vòng tròn.Cách giải quyết sự phụ thuộc vòng tròn trong Gradle
Dự án ban đầu là thiết lập để có cách bố trí này:
- project/
- common/
- product-a/
- product-b/
Mối quan hệ giữa common
, product-a
, và product-b
là khéo léo. common
tùy thuộc vào product-a
hoặc product-b
, tùy thuộc vào tệp cấu hình. Tương tự, product-a
và product-b
phụ thuộc vào common
, bất kể thuộc tính cấu hình. product-a
và product-b
sẽ không bao giờ được tạo cùng một lúc.
Tôi nghĩ một giải pháp nhanh chóng sẽ được sử dụng một cái gì đó như thế này trong project/build.gradle
:
project(':product-a') {
dependencies {
compile project(':common')
}
}
project(':product-b') {
dependencies {
compile project(':common')
}
}
Tiếp theo, tôi nghĩ về việc một cách để có được điều này gần gũi hơn với công tác chỉ product-a
. Điều đó dẫn tôi đến điều này:
project(':common') {
dependencies {
compile project(':product-a')
}
}
Điều này sẽ ném một ngoại lệ cho việc phụ thuộc vòng tròn.
tôi đã xem xét refactoring product-a
và product-b
bằng cách thiết lập các giao diện của các lớp học dự kiến bởi common
và product-a
/product-b
hoặc bằng cách sử dụng đa hình, nhưng trước khi tôi di chuyển về phía trước với một trong những người, là có một cách tốt hơn để thực hiện điều này với Gradle? Tôi chưa sẵn sàng để loại bỏ khoản nợ kỹ thuật này.