maven循环引用的问题

  多模块的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机制的工程,可以如下的解决,我碰到的问题就是这样解决了。

   出问题的工程是maven的多模块工程。

        B模块已经依赖了A模块,但是现在A模块又需要使用B模块中的相关方法。

        可以在A模块中定义一个接口,由于B模块依赖A模块,所以B模块可以直接实现该接口,然后A模块中通过接口声明并注入B模块中的实例即可。

        我使用的是HK2中的@Contract和@Service。

        同样是B模块已经依赖了A模块,但是现在A模块又需要使用B模块中的相关方法这个问题,还可以如下解决。

        一般maven的多模块工程,会有一个common模块,可以把接口定义在common模块,A模块中实现了接口,B模块注入该接口的实现。

        maven编译时会先编译common模块,再编译B模块,再编译A模块。

 

        关于build-helper-maven-plugin插件和maven循环依赖,可以看一下https://hck.iteye.com/blog/1728329

        

posted on 2019-08-05 21:37  lnlvinso  阅读(4194)  评论(0编辑  收藏  举报