如何获得 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 和语义版本控制:如何增加主要或次要版本