14.12. 在m2eclipse中分析项目依赖

最新版本m2eclipse的POM编辑器提供了一些依赖工具。这些工具承诺要改变人们维护及监视项目传递性依赖的方式。Maven的主要吸引力之一是它能够管理项目的依赖。如果你正在编写一个依赖于Spring Framework的Hibrenate 3集成的应用程序,你所要做的仅仅是依赖来自中央Maven仓库的spring-hibernate3构件。Maven会读取这个构件的POM然后添加所有必要的传递性依赖。虽然一开始这是一个吸引人们使用Maven的强大特性,但当一个项目有数十个依赖,每个依赖又有数十个传递性依赖的时候这就变得令人费解。

当你依赖于一个项目,这个项目有一个编写得很差的POM,它未能将依赖标记为可选,或者当你开始遇到传递性依赖之间的冲突,这个时候问题就出现了。如果你有一个需求要将类似于commons-loggingservlet-api的依赖排除,又或者你需要弄清楚为什么在某个特定的范围下一个特定的依赖显现了,通常你需要从命令行调用dependency:treedependency:resolve目标来追踪那些令人不愉快的传递性依赖。

这个时候m2eclipse的POM编辑器就便捷多了。如果你打开一个有很多依赖的项目,你可以打开Dependency Tree标签页并查看显示为两列的依赖如Figure 14.32, “POM编辑器的Dependency Tree标签页”。面板的左边显示树状的依赖。树的第一层包含了你项目的直接依赖,每个下一层依赖列出了依赖的依赖。左边的这一块是了解某个特定的依赖如何进入你项目的已解析依赖的很强大方式。面板的右边显示所有已解析的依赖。这是在所有冲突和范围已解决后的有效依赖的列表,也就是你项目将用来编译,测试和打包的有效依赖列表。

POM编辑器的Dependency Tree标签页

Figure 14.32. POM编辑器的Dependency Tree标签页


Dependency Tree标签页这一特性非常有价值,因为它能被用作一个侦测工具来找出某个特定的依赖是如何进入已解析的依赖列表的。编辑器中的搜索和过滤功能使得搜索和浏览项目的依赖变得十分容易。你可以使用编辑器工具栏的搜索框和“Dependency Hierarchy”及“Resolved Dependencies”部分的“排序”和“过滤”图标来查看依赖。Figure 14.33, “在依赖树中定位依赖”展示了当你点击“Resovled Dependencies”列表中的commons-logging的时候会发生什么。当“Dependencies Hierarchy”部分的过滤器被开启的时候,在已解析依赖上点击的时候,面板左边的依赖树会被过滤,以显示所有对已解析依赖起作用的节点。如果你正在试图去除一个已解析依赖,你可以使用这个工具来找出什么依赖(以及什么传递性依赖)对这个已解析的依赖起作用。换句话说,如果你要从你的依赖集合中去除类似于commons-logging这样的依赖,那么Dependency Tree标签页就是你想要使用的工具。

在依赖树中定位依赖

Figure 14.33. 在依赖树中定位依赖


m2eclipse还能让你以图的形式查看你项目的依赖。Figure 14.34, “以图的形式查看项目的依赖”展示了idiom-core的依赖。最顶上的方框就是idiom-core项目,其它的依赖都在它的下面。直接依赖与顶层方框直接相连,传递性依赖则都最终连接这些直接依赖。你可以在图中选择一个节点,跟它相连的依赖会被标亮,或者你可以使用页面顶部的搜索框来寻找匹配的节点。

注意每个图节点上的“打开文件夹”图标说明这个构件存在与Eclipse workspace中,而“jar”图标说明这个节点的构件指向了Maven仓库。

以图的形式查看项目的依赖

Figure 14.34. 以图的形式查看项目的依赖


通过在编辑器中右击可以改变图的表现形式。你可以选择显示构件的id,group id,version,scope,或者卷起节点文本,显示图标。Figure 14.35, “依赖图的放射状布局”展示了和Figure 14.34, “以图的形式查看项目的依赖”一样的图,但是用了放射状布局。

依赖图的放射状布局

Figure 14.35. 依赖图的放射状布局