Java 如何从定制Mojo中获得maven二进制版本?

Java 如何从定制Mojo中获得maven二进制版本?,java,maven,maven-plugin,maven-mojo,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-

我指的是通常运行时返回的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版本运行验证,谢谢您可以使用以下代码片段获得有关当前maven版本的信息:

@Component
private RuntimeInformation runtime;

public void execute() {
  ArtifactVersion version = runtime.getApplicationVersion();
  getLog().info("Version: " + version);
...
}
运行时
还提供了有关
getBuildNumber()
getIncrementalVersion()
getMajorVersion()
getMinorVersion()
getQualifier()
的信息。
这应该适合您的需要。

使用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>
用法

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

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

@khmarbaise,谢谢你为我指明了正确的方向

首先,你为什么要知道这一点?您的魔咒是否只适用于特定的Maven版本?使用maven enforcer插件?您是否在pom中设置了先决条件(但是Maven 3.X不推荐使用be carefull)。我为外部用户提供了一个工具,让他们通过我的mojo使用该插件执行其他Maven插件。一个给定的插件可能只与某些maven版本兼容。管理员在定义用户将在集中式系统中执行的插件时,可以指定给定插件兼容的maven版本。然后,当用户在本地机器上执行这些插件时,我可以通过对本地安装的maven版本进行验证来跳过不兼容的插件?与pom文件相比,您的方法有哪些优势?您正在尝试创建一个运行Maven的插件?为什么不使用Maven本身呢。你面临的问题是什么?除此之外,如果插件与Maven版本不兼容,则必须使用不同的插件版本,否则构建将无法工作。这必须在描述构建的pom文件中定义。出于这样的目的,公司pom中的插件管理部分是正确的方法,强制用户使用这些东西的是maven-enforcer-plugin。管理员与maven这样的构建系统有什么关系?整个目的是使用maven在代码库上强制执行某些规则,而不是实际执行构建。限制是代码库的现有pom文件无法更改。因此,在公司pom文件中包含插件是不可能的。开发人员将显式调用Mojo来检查他们的代码是否违反任何规则。管理员以maven插件的形式定义需要验证的规则,例如中央注册表中的“maven enforcer插件”。当开发人员调用my Mojo时,它将连接到注册表并下载已定义的插件列表并执行它们。我似乎找不到RuntimeInformation类,它是哪个包的一部分?
 /**
 *
 * @component
 */
private RuntimeInformation runtime;

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