如何获得 Maven 版本的主要部分?

Posted

技术标签:

【中文标题】如何获得 Maven 版本的主要部分?【英文标题】:How to get the semver Major part of a Maven version? 【发布时间】:2011-07-22 12:33:43 【问题描述】:

是否可以获得project.version 的主要版本(<Major>.<Minor>.<Patch>)?

例如,如果我的版本是1.3.4,我想获得1 以便以后在同一个 pom.xml 的配置中使用它

类似:

<configuration>
  <name>project_name.$project.version:major</name>
</configuration>

如果没有,有什么替代方案?

【问题讨论】:

值得注意的是,Maven 不使用SemVer.org 版本控制规范。相反,它使用非常相似的自己的约定。在此处阅读(在 3.3.1“项目版本”部分下)...sonatype.com/books/mvnref-book/reference/… 【参考方案1】:

这适用于 Maven 3.3.9:

$project.artifact.selectedVersion.majorVersion

【讨论】:

在 maven 3.3.9 中对我来说效果很好。知道这是否是标准的 Maven 东西吗?我找不到该变量的官方 maven 文档 我可以说$project.artifact 是一个不错的技巧,但不是标准。官方只有$project,见maven.apache.org/pom.html @MarcosZolnowski,不对,API是官方文档:maven.apache.org/ref/3.0.5/maven-core/apidocs/org/apache/maven/… 该API是为插件开发者准备的,对maven用户不做任何保证。任何时候他们都可以改变这种行为。 那不是plugin api,那是core api。插件api规范为:maven.apache.org/ref/3.2.5/maven-plugin-api/apidocs/index.html【参考方案2】:

找到了。 build-helper-maven-plugin 具有解析版本组件的能力。

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.5</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <id>parse-version</id>
            <goals>
              <goal>parse-version</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <tasks>
                <echo>[version] $project.version</echo>
                <echo>[majorVersion] $parsedVersion.majorVersion</echo>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

【讨论】:

+1 - 我已经使用 Maven 多年但不知道这一点!【参考方案3】:

版本不一定采用您描述的结构。

Maven 有尾随数字的约定,但您不必使用它们。

如果您有想要反汇编的约定,您可以编写自己的 maven 插件,在定义它们时将多个属性设置为多个部分。

【讨论】:

根据来自 Sonatype 的the Maven reference documentation 有一个约定(您可以随意违反)。

以上是关于如何获得 Maven 版本的主要部分?的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins、Maven 和语义版本控制:如何增加主要或次要版本

如何升级 maven 插件的版本?

如何将 Maven 项目版本获​​取到 bash 命令行

如何从 Maven 存储库中找到最新版本的工件

如何在 Windows 上从 Maven 和 SBT 获得彩色输出?

如何快速的解决Maven依赖冲突