2012-07-04 30 views
9

Tôi có hai mô-đun A và B. Actualy B là plugin cho A.
B phụ thuộc vào A trong thời gian biên dịch. Một KHÔNG phụ thuộc vào B. On A runtime Tôi muốn thêm B để classpath, vì vậy trong pom.xml Một của tôi thêm các phụ thuộc sauPhạm vi thời gian chạy Maven và phụ thuộc chu kỳ

pom.xml

<dependency> 
     <groupId>my_group</groupId> 
     <artifactId>my_Plugin</artifactId> 
     <version>${project.version}</version> 
     <scope>runtime</scope> 
    </dependency> 

Maven quá trình thất bại với lỗi phụ thuộc cyclic

[ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='A'}' and 'Vertex{label='B'}' introduces to cycle in the graph B-->A-->B -> [Help 1] 

[LỖI]

Tại sao tác động phụ thuộc thời gian chạy thời gian biên dịch?

+1

Có một cách tiếp cận tốt để sắp xếp bản dựng của bạn cho loại dự án này. Nếu bạn cấu trúc lại mã được chia sẻ thành một mô đun khác (C), dự án B sẽ không còn cần phải phụ thuộc vào A tại thời gian biên dịch - A và B có thể phụ thuộc vào C. Sau đó, không có vấn đề gì để có A phụ thuộc vào B trong thời gian chạy. Một cách hay để nghĩ về điều này là xem xét việc viết một thư viện - một loạt các mã có thể chia sẻ - và một ứng dụng, đó là một tập hợp các thư viện được lắp ráp. Một dự án ứng dụng không thực sự cần chứa bất kỳ mã nào cả. – Conan

Trả lời

1

Như được đề xuất bởi Conan và nếu có thể trích xuất mã chung của bạn thành một mô-đun riêng biệt để giải quyết chu kỳ. Thông thường, trong những trường hợp như vậy, người ta sẽ trích xuất các giao diện chung và các lớp lõi thành một mô-đun riêng biệt được mở rộng bởi cả hai mô-đun gây ra sự phụ thuộc chu kỳ. Sau đó, bạn sẽ loại bỏ các phụ thuộc trực tiếp vào các mô-đun ban đầu ở trạng thái tuần hoàn. Đôi khi điều này rất khó giải quyết, nhưng việc mô đun hóa mã giúp bạn tìm ra cách cấu trúc lại mã của bạn để nó có thể dễ dàng sử dụng lại được.

+1

Mã của A không thuộc trách nhiệm của tôi, vì vậy tôi không thể tách nó ra. – user1500951

+0

Vâng, nếu đó là mã bạn hoặc công ty của bạn nghĩ ra, đây là con đường để đi. Nếu không - dựa trên ví dụ của bạn và ít mà bạn đã nói với chúng tôi, không có giải pháp rõ ràng nào khác. – carlspring

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