多模塊的maven工程,有時候由於設計的不合理或者需求的變更。會導致模塊之間產生循環依賴,編譯的時候會報如下的錯誤:
[INFO] Scanning for projects... [ERROR] The projects in the reactor contain a cyclic reference: Edge between .....
重構肯定是需要的,把2個模塊中都用到部分移到common子模塊中。2個模塊都依賴common中的代碼,這樣就可以消除2個模塊的相互引用了。
也可以使用build-helper-maven-plugin插件,比如A依賴B,B依賴C,C依賴A的情況。這個插件提供了一種規避措施,即臨時地將工程A、B、C合並成一個中間工程,編譯出臨時的模塊D。然后A、B、C再分別依賴臨時模塊D進行編譯 。
有IOC機制的工程,可以如下的解決,我碰到的問題就是這樣解決了。
B已經依賴了A,但是現在A又需要使用B中的相關方法。可以在A中定義一個接口,由於B依賴A,所以B可以直接實現該接口,然后A中通過接口聲明並注入B中的實例即可。
我使用的是HK2中的@Contract和@Service。
關於build-helper-maven-plugin插件和maven循環依賴,可以看一下https://hck.iteye.com/blog/1728329。