分层maven项目版本

时间:2013-01-18 13:14:27

标签: maven version

我有一个复杂的Maven项目,其模块和子项目最多可达四级继承。此外,一些模块依赖于不在同一“子树”中的模块,我想知道每次模块依赖时我是否可以避免表达版本。

例如我有

a
 -b
   -c
 -d
   -e

假设模块e取决于c,以干燥方式指定版本的最佳方法是什么?

如果在模块e的pom.xml中,我没有指定我想要的c模块版本,那么我的构建将失败。有没有一种聪明的方法来处理这个版本问题?

2 个答案:

答案 0 :(得分:2)

groupId和artifactId表示maven中的单个项目,但必须指定版本(或从父pom继承)以确定maven需要引用的项目版本。它似乎是多余的,但如果有许多不同的版本,它是必要的。

答案 1 :(得分:1)

最好的方法是在项目根目录中的dependencyManagement块中定义具有相应版本号的所有工件,如:

a (pom.xml)
 -b
   -c
 -d
   -e

以下内容:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>project</groupId>
      <artifactId>b</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>project</groupId>
      <artifactId>c</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>project</groupId>
      <artifactId>d</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>project</groupId>
      <artifactId>e</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

但是使用给定的结构:

a (pom.xml)
 -b
   -c
 -d
   -e

必须包括模块列表(包装pom),b(包装pom)和d(包装pom),这意味着a,b和d永远不会被用作依赖关系,这意味着你可以从上面省略它们块。