Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图从插件中获取Maven的版本_Java_Maven_Maven Plugin - Fatal编程技术网

Java 试图从插件中获取Maven的版本

Java 试图从插件中获取Maven的版本,java,maven,maven-plugin,Java,Maven,Maven Plugin,我正在编写一个Maven插件,我需要从插件代码中了解实际运行的Maven版本。在shell中运行mvn-version后,预期结果将是版本号(例如3.3.9),如下所示: $ mvn -version Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T18:41:47+02:00) Maven home: /usr/local/opt/maven Java version: 1.8.0_111, ve

我正在编写一个Maven插件,我需要从插件代码中了解实际运行的Maven版本。在shell中运行mvn-version后,预期结果将是版本号(例如3.3.9),如下所示:

$ mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T18:41:47+02:00)
Maven home: /usr/local/opt/maven
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.12.2", arch: "x86_64", family: "mac"

由于Maven文档有点缺乏,谷歌搜索“Maven版本”只会给我带来关于项目版本的结果(与Apache Maven本身的版本相反),因此很难找到答案。

您可以使用用户属性
Maven.build.version
,如下所示:

public class Plugin extends AbstractMojo {

  @Parameter(defaultValue = "${maven.build.version}")
  private String mavenVersion;

  ...

}
在您的案例中,属性将包含以下值:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T18:41:47+02:00)

这并不完全是您所期望的,但我希望这将对您有所帮助。

从Maven 3.0.2开始,您可以使用该组件,它提供有关当前Maven运行时环境的信息

@Component
private RuntimeInformation runtimeInformation;

public void execute() throws MojoExecutionException, MojoFailureException {
    String mavenVersion = runtimeInformation.getMavenVersion();
    getLog().info(mavenVersion); // prints 3.3.9 when running the build with that version
}
该方法完全返回当前Maven版本,无需解析任何内容:

检索当前Maven版本,例如“3.0.2”

Mojo需要依赖于
maven core
,才能定位该类:

<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-core</artifactId>
  <version>3.0.2</version> <!-- or some other version, like 3.3.9 -->
</dependency>

org.apache.maven
马文堆芯
3.0.2 

正是我一直在寻找的!谢谢这也是一个很好的答案,尽管@Tunaki的答案非常准确。谢谢