如何从自定义Mojo中获取maven二进制版本?

时间:2014-02-11 09:07:12

标签: java maven maven-plugin maven-mojo

我指的是你经常运行

时返回的maven二进制版本
mvn --version

从命令行返回如下所示的输出

Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.6.0_45, vendor: Sun Microsystems Inc.
Java home: /home/uvindra/Apps/java6/jdk1.6.0_45/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.11.0-15-generic", arch: "amd64", family: "unix"

请注意maven版本3.0.4。从Java中的自定义Maven Mojo中访问它的最佳方法是什么?有没有可用的财产?

我想针对正在执行我的Mojo的当前maven版本运行验证,谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码段获取有关当前Maven版本的信息:

@Component
private RuntimeInformation runtime;

public void execute() {
  ArtifactVersion version = runtime.getApplicationVersion();
  getLog().info("Version: " + version);
...
}

runtime还提供有关getBuildNumber()getIncrementalVersion()getMajorVersion()getMinorVersion()getQualifier()的信息。 这应该符合你的需要。

答案 1 :(得分:1)

khmarbaise提到的使用getApplicationVersion()已被弃用,getMavenVersion()是推荐使用的函数。您需要将maven-core 3.0.2或更高版本作为依赖项包含在RuntimeInformation类中。

这是完整的用法示例,

必需的pom依赖

<dependency>
   <groupId>org.apache.maven</groupId>
   <artifactId>maven-core</artifactId>
   <version>3.0.2</version>
</dependency>

包导入

import org.apache.maven.rtinfo.RuntimeInformation;

<强>用法

 /**
 *
 * @component
 */
private RuntimeInformation runtime;

public void execute() {
     String version = runtime.getMavenVersion();
     getLog().info("Maven Version: " + version);
     ...
}

@khmarbaise,谢谢你指出我正确的方向