Maven确定正在使用的依赖项版本

时间:2015-04-24 16:56:42

标签: maven

我继承了一个maven项目(我还在学习maven)。

该项目有3个模块,有3个模块继承的父pom。

我需要对pom.xml进行更改以获取所请求的更改。

在我进行更改并运行项目后,我收到了错误。

Caused by: java.lang.ClassNotFoundException: org.quartz.spi.ClassLoadHelper

所以我注意到我的pom.xml排除如下:

   <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>framework</artifactId>
        <version>1.0.9</version>
        <exclusions>
            <exclusion>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
            </exclusion>
        <exclusion>
    </dependency>

所以我删除了排除并再次运行项目以获得以下错误

    Caused by: java.lang.IncompatibleClassChangeError: 
class org.springframework.scheduling.quartz.CronTriggerBean 
has interface org.quartz.CronTrigger as super class

所以看起来排除意味着因为其他依赖性满足了石英依赖性。

看起来像我添加了新的依赖项之后,某种方式已经排除了石英依赖。

我的问题是:

如何确定石英依赖性带来了什么? 如何确保通过添加新的依赖关系我不排除现有的石英依赖?

3 个答案:

答案 0 :(得分:1)

看一下命令

    mvn dependency:tree 

答案 1 :(得分:0)

您可以查看maven dependency tree以了解石英依赖项带来了什么。

答案 2 :(得分:0)

Maven跟随 - &#39;依赖调解&#39;算法在依赖关系之间进行选择。规则是:

  1. 最近的第一个:较低级别的依赖关系优先于
    另一个更高的深度。 (这里,等级指的是第1级,第2级 等级传递依赖等)因此,直接依赖有 优先于传递依赖。

  2. First Found - 在同一级别,找到第一个依赖项。

  3. 因此,要确定哪个依赖项引入了Quartz依赖项,请查看pom.xml的依赖关系层次结构 - http://books.sonatype.com/m2eclipse-book/reference/dependencies-sect-analyze-depend.html#fig-dependencies-pom-editor-locate-depend

    为了确保您没有丢失当前的石英依赖项,请将其作为直接依赖项添加到pom.xml中。这将覆盖所有石英传递依赖项。