如何在maven中处理版本?

如何在maven中处理版本?,maven,maven-3,Maven,Maven 3,我在整个父pom和子pom中都有这些版本号,包括这样的父引用 <parent> <groupId>com.cigna.ifp</groupId> <artifactId>ifp-core</artifactId> <version>${parent.version}</version> </parent> com.cigna.ifp ifp核心 ${paren

我在整个父pom和子pom中都有这些版本号,包括这样的父引用

  <parent>
     <groupId>com.cigna.ifp</groupId>
     <artifactId>ifp-core</artifactId>
     <version>${parent.version}</version>
  </parent>

com.cigna.ifp
ifp核心
${parent.version}
以及对其他子项目的依赖引用,如

<dependency>
  <groupId>com.cigna.ifp</groupId>
  <artifactId>ifp-shared</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

com.cigna.ifp
ifp共享
1.0-快照
最后是我们正在构建的东西版本的声明

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.company</groupId>
  <artifactId>artifcat</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>ifp-shared</name>
  <url>http://maven.apache.org</url>
4.0.0
com公司
人造物
1.0-快照
罐子
ifp共享
http://maven.apache.org
根据解决了一半问题的一些答案进行编辑

我们希望所有版本都是${project.version},因为它实际上只是一个项目和一个发行号

我似乎可以在依赖项中执行${project.version},但这在上面的父xml代码中不起作用。还有别的办法吗?(老兄,我真的应该换成格拉德尔)

谢谢,
Dean

project.version是您想要的。不是父版本。

project.version是您想要的。不是父级。版本。


<parent>
 <groupId>com.cigna.ifp</groupId>
 <artifactId>ifp-core</artifactId>
 <version>1.2.3-SNAPSHOT</version> <!-- real version-->
</parent>

<artifactId>blah</artifactId>
<!-- No version here, will be inherited -->

<dependency>
  <groupId>com.cigna.ifp</groupId>
  <artifactId>ifp-shared</artifactId>
  <version>${project.version}</version>
</dependency>
com.cigna.ifp ifp核心 1.2.3-快照 废话 com.cigna.ifp ifp共享 ${project.version}

com.cigna.ifp
ifp核心
1.2.3-快照
废话
com.cigna.ifp
ifp共享
${project.version}

您需要使用DependencyManager标记在父pom中为依赖项集中化版本

看看这个问题和答案


对于您自己的模块,有些属性是从父pom继承的。您需要在每个子项中声明父项版本,但如果希望子项pom与父项pom相同,则不需要在子项pom中声明groupId/版本。

您需要使用dependencyManagement标记在父项pom中为依赖项集中化版本

看看这个问题和答案


对于您自己的模块,有些属性是从父pom继承的。您需要在每个子项中声明父项版本,但如果您希望子项POM与父项POM相同,则不需要在子项POM中声明groupId/版本。

我们现在切换到gradle,它的效果非常好。每个自动生成的新版本都以1.2.x的形式发布,其中x是下一个生成编号。下游项目取决于1.2.+。这允许每个版本都是官方的,这样QA可以测试它,拒绝它,或者去,是的,build 1.2.568是我们将向世界发布的版本。项目可以依赖于1.2。但是他们没有得到bug修复。这似乎比所有的快照废话要有效得多,因为你给QA一个快照,他们批准了,你必须更改并进行另一个构建。我们希望每个构建看起来都是官方的,这样他们就可以发布一个恰好通过了所有QA测试的构建。

我们切换到gradle,它现在运行得非常好。每个自动生成的新版本都以1.2.x的形式发布,其中x是下一个生成编号。下游项目取决于1.2.+。这允许每个版本都是官方的,这样QA可以测试它,拒绝它,或者去,是的,build 1.2.568是我们将向世界发布的版本。项目可以依赖于1.2。但是他们没有得到bug修复。这似乎比所有的快照废话要有效得多,因为你给QA一个快照,他们批准了,你必须更改并进行另一个构建。我们希望每个构建看起来都是正式的,这样他们就可以发布恰好通过所有QA测试的构建。

我不想在我的5个子项目中键入1.2.3-SNAPSHOT…我如何避免这样做?不幸的是,我不知道。其思想是项目是自包含的,因此您需要pom中的某个版本。也就是说,您可以使用一个父版本和从公共repo获得的父版本进行构建,并且与当前文件系统中的版本不同。这并不是说你想这么做,但maven现在就是这样工作的。顺便说一句,在你的子项目中,version和groupId默认都是从父项目继承的,可以忽略不计。此外,您还可以通过在父项目中使用dependencyManagement来解决依赖项中的${project.version},但我不确定在所有情况下都建议这样做。我不想在我的5个子项目中键入1.2.3-SNAPSHOT…如何避免这样做?不幸的是,我不知道。其思想是项目是自包含的,因此您需要pom中的某个版本。也就是说,您可以使用一个父版本和从公共repo获得的父版本进行构建,并且与当前文件系统中的版本不同。这并不是说你想这么做,但maven现在就是这样工作的。顺便说一句,在你的子项目中,version和groupId默认都是从父项目继承的,可以忽略不计。此外,您还可以通过在父级中使用dependencyManagement来解决依赖项中的${project.version},但我不确定在所有情况下都建议这样做。