2009-08-13 145 views
5

我一直在尝试使用Maven构建项目。该项目在我试过的几台电脑上都能正常工作,但在一台机器上,我遇到了一个随机问题。未知依赖Maven构建

从本质上讲,maven正在搜索一个未包含在pom.xml文件或settings.xml文件中的依赖项。

我试过mvn依赖:purge-local-repository但仍无济于事;我仍然坚持mvn寻找依赖我不知道它从哪里看。

回答

12

如果在项目中运行mvn依赖关系:树,您将看到引入不需要的依赖项的位置,然后可以排除依赖项。

这是输出的一个例子:

[INFO] [dependency:tree] 
[INFO] org.apache.maven.plugins:maven-dependency-plugin:maven-plugin:2.0-alpha-5-SNAPSHOT 
[INFO] \- org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-8:compile 
[INFO] \- org.codehaus.plexus:plexus-velocity:jar:1.1.3:compile 
[INFO]  \- velocity:velocity:jar:1.4:compile 

要排除的依赖,你会做这样的事情:

<dependency> 
    <groupId>sample.ProjectA</groupId> 
    <artifactId>Project-A</artifactId> 
    <version>1.0</version> 
    <exclusions> 
    <exclusion> <!-- declare the exclusion here --> 
     <groupId>sample.ProjectB</groupId> 
     <artifactId>Project-B</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

有关的依赖插件的更多细节见documentation。请参阅guide

更新:您还可以使用m2eclipse插件生成依赖关系的图形树或图形。 dependency tree screenshot http://www.sonatype.com/books/m2eclipse-book/reference/figs/web/eclipse_pom-editor-depend-tree-locate.png dependency graph screenshot http://www.sonatype.com/books/m2eclipse-book/reference/figs/web/eclipse_pom-editor-graph.png

0

Maven依赖可以传递依赖(依赖的依赖),所以即使自己是不是在POM明确声明,Maven的可能仍然需要去找到它。

运行mvn依赖关系:树应该帮助您诊断问题,正如Rich Seller所描述的那样;它也可能帮助你在没有问题的其他机器上运行它并比较输出。

purge-local-repository在这方面并没有真正的帮助你;所做的一切就是从本地回购中删除工件,以防其中一个损坏。如果maven试图获得不属于本地回购的依赖关系,那么它确实无助于事。