在我的应用程序中,我使用的是由多个模块组成的外部库(Batik 1.7)。模块之间具有多个循环依赖关系。这不会影响构建,但是某些工具(例如M2Eclipse依赖关系图或依赖关系报告)将不再起作用。
有没有一种很好的方法来诊断哪些周期,以及一种简单的方法来摆脱它们?
更新:问题在于POM,例如: batik-bridge
取决于batik-gvt
,{{3}}依赖于batik-bridge
。
我想我可以通过手动排除某些依赖项来解决这个问题,但我不确定要排除什么。我想要的是清楚地概述图中的周期。
答案 0 :(得分:4)
我不确定这是否与maven相关(你不能在带有maven的模块之间存在循环依赖)但是我可能没有得到什么。也就是说,您可以使用JDepend来分析一段代码并找到循环依赖关系(请参阅Interpreting Dependency Cycles)。如果您更喜欢使用Eclipse中的JDepend,那么就有JDepend4Eclipse插件。
从它的subversion repository查看Batik,在其来源上运行JDepend,看看你是否找到了什么(我想你会发现)。但是,说实话,这很容易。摆脱循环依赖是另一回事,可能并不那么容易。这可能涉及诸如将类从一个包移动到另一个包,重新打包模块,理解Batik的构建如何工作(请注意其Ant构建脚本有2220行)等任务。换句话说,这将需要对您的库进行一些艰苦的工作最初只想使用(除非您提供这些更改,否则您可能必须在以后的版本中再次应用它们)。我的建议:在开始朝这个方向挖掘之前再考虑两次。
仅为了您的信息,还有一个jdepend-maven-plugin,只有在您的项目(即您的代码)上运行JDepend时才有用。
答案 1 :(得分:2)
尝试从最顶层项目的根目录中的命令行运行:
mvn dependency:tree
答案 2 :(得分:1)
尝试使用UCDetector它有助于在开发时在类级别中查找依赖关系循环。另一个有用的工具是Tattletale。
它为您提供可以帮助您的报告
我故意使用maven解决方案,而不是将其他回复加倍。