2012-07-04 72 views
9

我有兩個模塊A和B. Actualy B是A的插件。
B在編譯時依賴於A.一個不依賴於B. 在運行時我想補充B到類路徑,所以在的pom.xml我添加下面的依賴Maven運行時範圍和循環依賴

pom.xml

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

Maven的過程中失敗,並循環依賴錯誤

[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] 

[錯誤]

爲什麼運行依賴影響編譯時間?

+1

有一個很好的方法來安排你的構建這種類型的項目。如果您重構了共享到另一個模塊(C)的代碼,項目B將不再需要在編譯時依賴於A - A和B都可以依賴於C.然後,A依賴於B並不是問題在運行時。考慮這一點的一個好方法是考慮編寫一個庫(一堆可共享的代碼)和一個應用程序,這是一個彙編庫的集合。一個應用程序項目實際上並不需要包含任何代碼。 – Conan

回答

1

正如柯南所建議的,並且如果可能的話,將您的公共代碼提取到單獨的模塊中以解決循環。通常,在這種情況下,可以將通用接口和核心類提取到單獨的模塊中,這兩個模塊由兩個引起循環依賴的模塊擴展。然後,您將刪除最初處於循環狀態的模塊的直接依賴關係。有時候這很難解決,但是模塊化代碼可以幫助你找出如何重構你的代碼,使其易於重用。

+1

A的代碼不在我的責任範圍內,所以我無法將其分開。 – user1500951

+0

好吧,如果它是你或你的公司設計的代碼,這是要走的路。 如果沒有 - 基於你的例子和你告訴我們的小事,沒有其他明顯的解決方案。 – carlspring