2016-06-27 26 views
5

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-aproduct-b phụ thuộc vào common, bất kể thuộc tính cấu hình. product-aproduct-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-aproduct-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 commonproduct-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.

Trả lời

5

Loại bỏ một phụ thuộc vòng tròn không thể giải quyết được bằng mẹo xây dựng. Bạn sẽ phải cấu trúc lại các mô-đun của bạn để không còn phụ thuộc vòng tròn nữa. Từ tên mô-đun của bạn và không có thông tin nào khác, tôi nghĩ bạn sẽ muốn trích xuất phần "chung" phụ thuộc vào "sản phẩm- *" và đặt nó vào một mô-đun mới.

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