依赖管理和范围

依赖管理和范围

我通常在parent-project/pom.xml放置一个<dependencyManagement>部分。 这个<dependencyManagement>部分包含了这样的子类模块的所有依赖关系的声明和版本(即没有<scope>元素):

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>
  </dependencies> 
</dependencyManagement>

在所有的子模块(即moduleX / pom.xml)中,我有:

  <dependencies>
    <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <scope>test</scope>
    </dependency>
  </dependencies> 

显然,在这个例子中,我为同一个依赖关系重复了<scope>test</scope>多次(每个需要junit的子模块一次)。

我的问题是:关于<scope>声明的最佳做法是什么? 最好把它放在<dependencyManagement>吗? 或者最好把它放在子模块的<dependencies>部分(像这篇文章)? 为什么? 这个问题有什么明确的答案吗?

采纳答案:

有点迟到的聚会,但我会添加我的两美分。 我最近遇到了一个很难调试的问题。 我有一个父pom来管理多个项目的依赖关系。 我已经设置了它们之间的所有依赖关系,包括groupId,artifactId,版本和最常见的范围 。 我的想法是,如果与最常见的范围相符 ,我不必在每个项目的实际依赖部分中包含范围 。 当某些依赖关系显示为传递依赖关系时,会发生此问题。 例如如果

  • A在编译范围内取决于B
  • B在编译范围内依赖于C
  • C设置为依赖于管理父级

然后确定A对C的传递依赖性被提供。 我不确定是否有意义,但这确实令人困惑。

无论如何,保存自己的麻烦,并将范围从你的依赖管理。

参考更多解答:依赖管理和范围,转载请保留依赖管理和范围

更多:dependency-management