【问题标题】:how to handle versions in maven?如何处理 Maven 中的版本?
【发布时间】:2012-09-06 20:48:31
【问题描述】:

我在父 pom 和子 pom 中都有所有这些版本号,包括像这样的父参考

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

以及对其他子项目的依赖引用

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

最后是我们正在构建的东西版本的声明

  <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>

根据一些解决了一半问题的答案进行编辑...

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

我似乎可以在依赖项中执行 ${project.version} ,但这在上面的父 xml 代码中不起作用。还有其他方法吗? (伙计,我真的应该切换到 gradle)。

谢谢, 院长

【问题讨论】:

    标签: maven maven-3


    【解决方案1】:
    <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>
    

    【讨论】:

    • 我不想在我的 5 个子项目中输入 1.2.3-SNAPSHOT...如何避免这样做?
    • 不幸的是,我不知道。这个想法是一个项目是自包含的,所以你需要在 pom.xml 中的某个地方有一个版本。也就是您可以使用从公共回购获得的父版本和父版本构建,并且与您现在文件系统中的版本不同。并不是说你想这样做,但这就是 maven 现在的工作方式。
    • 顺便说一句,在您的子项目中,version 和 groupId 默认都是从 parent 继承的,可以省略。您也可以通过在父项中使用 dependencyManagement 来解决依赖项中的 ${project.version} - 但我不确定我是否会在所有情况下都推荐。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您需要使用dependencyManagement标签将依赖项的父pom中的版本居中。

      查看此问题和答案

      differences between dependencymanagement and dependencies in maven

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

      【讨论】:

        【解决方案4】:

        我们切换到 gradle,它现在工作得非常好。每个自动构建一个新版本都作为 1.2.x 发布,其中 x 是下一个构建号。下游,项目依赖 1.2.+。这使得每个版本都是官方的,因此 QA 可以对其进行测试、拒绝或继续,是的,构建 1.2.568 是我们将向全世界发布的版本。项目可以依赖于 1.2。但是他们没有得到错误修复。当您给 QA 一个快照并且他们批准并且您必须更改并进行另一个构建时,这似乎比所有那些快照废话要好得多。我们希望每个版本看起来都是官方的,这样他们就可以发布恰好通过所有 QA 测试的版本。

        【讨论】:

          猜你喜欢
          • 2022-01-22
          • 2021-11-27
          • 2011-05-01
          • 1970-01-01
          • 2020-07-01
          • 2022-06-17
          • 2020-04-03
          • 1970-01-01
          • 2021-12-31
          相关资源
          最近更新 更多