maven依赖:树日志:version1编译(从版本2管理的版本)

时间:2018-03-06 15:47:55

标签: java maven solrj

  1. 我遇到了依赖问题:树。几天困扰我。 我在我的pom.xml中的一个名为A的模块中定义了版本为6.6.0的solr-solrj,如下所示: T

  2. 另一个名为模块A的B依赖项的模块。当我运行<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.6.0</version> </dependency>时,控制台显示为mvn dependency:tree -Dverbose -Dincludes=org.apache.solr:solr-solrj。我找到了所有的pom.xml,我还没有定义5.5.3版本。在我的项目中,我还没有在5.5.3版本上发现任何jar依赖项。

  3. org.apache.solr:solr-solrj:jar:5.5.3:compile (version managed from 6.6.0)的含义是什么?为什么5.5.3版本出现在我的项目中?

  4. 1

  5. 2

    pic1是我使用idea来显示依赖关系。 pic2是我点击solrj跳转到pom.xml。

1 个答案:

答案 0 :(得分:2)

模块B的pom或模块B的父pom包括<dependencyManagement>部分。在maven中使用依赖关系管理来集中用于jar的版本。它可能会覆盖您定义为版本5.5.3的 solr-solrj 版本。依赖管理功能主要有两种。您可能正在体验第2部分中描述的内容。请参阅结论以获取特定于您的问题的摘要。

1。它是定义依赖项版本的中心位置。

因此,当<dependencyManagement>部分中定义工件版本时,您可以在不定义版本的情况下在pom中声明依赖关系,并且将自动使用<dependencyManagement>中定义的版本。

示例1

让我们说你的父pom定义了以下内容

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.mememe</groupId>
      <artifactId>mylib</artifactId>
      <version>1.1.12</version>
    </dependency>
  </dependencies>
</dependencyManagement>

然后,如果您在pom中定义以下内容

<dependencies>
  <dependency>
    <groupId>com.mememe</groupId>
    <artifactId>mylib</artifactId>
  </dependency>
</dependencies>

您的项目将自动使用您父p的<dependencyManagement>部分中定义的1.1.12版。

2。覆盖传递依赖项的版本。

如果您的<dependencyManagement>中定义了工件版本,并且其中一个依赖项对同一工件具有传递依赖性,则会自动使用<dependencyManagement>部分中定义的工件版本。 / p>

示例2

让我们说这个神器

<dependency>
  <groupId>com.youyou</groupId>
  <artifactId>yourlib</artifactId>
  <version>3.0.0</version>
</dependency>

是否存在这种传递依赖

<dependency>
  <groupId>com.morestuff</groupId>
  <artifactId>morelib</artifactId>
  <version>2.0.0</version>
</dependency>

现在让我们说我们的父pom定义了这个<dependencyManagement>部分

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.morestuff</groupId>
      <artifactId>morelib</artifactId>
      <version>2.5.2</version>
    </dependency>
  </dependencies>
</dependencyManagement>

然后,如果您在pom中定义此依赖关系

<dependency>
  <groupId>com.youyou</groupId>
  <artifactId>yourlib</artifactId>
  <version>3.0.0</version>
</dependency>

Maven将使用 morelib 版本2.5.2覆盖 yourlib morelib 版本2.0.0的依赖。

结论

根据您的问题,有人在模块B的pom或父pom中定义了如下所示的<dependencyManagement>部分:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.solr</groupId>
      <artifactId>solr-solrj</artifactId>
      <version>5.5.3</version>
    </dependency>
  </dependencies>
</dependencyManagement>

由于 solr-solrj 是模块A的依赖关系,因此mondule A是模块B的依赖关系。依赖关系管理将 solr-solrj 的版本覆盖为5.5 .3。您应该与在项目中添加此dependencyManagement配置的人员交谈,可能有充分的理由说明他们只希望使用版本5.5.3。

文档

在官方专家文档here中查看更多详情。