Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
可以从自定义插件访问Maven项目信息吗?_Maven - Fatal编程技术网

可以从自定义插件访问Maven项目信息吗?

可以从自定义插件访问Maven项目信息吗?,maven,Maven,我正在用Maven编写一个自定义插件,希望访问有关该项目的信息。作为一个简单的例子,在我的Java代码中,我想获取项目的构建目录。我知道我可以使用如下参数注释获得它: @Mojo( name="myplugin" ) public class MyPluginMojo extends AbstractMojo { // DOES work. The project.build.directory prop is resolved. @Parameter( property="m

我正在用Maven编写一个自定义插件,希望访问有关该项目的信息。作为一个简单的例子,在我的Java代码中,我想获取项目的构建目录。我知道我可以使用如下参数注释获得它:

@Mojo( name="myplugin" )
public class MyPluginMojo extends AbstractMojo {

    // DOES work. The project.build.directory prop is resolved.
    @Parameter( property="myplugin.buildDir", defaultValue="${project.build.directory}", required=true )
private File buildDir;

    public void execute () throws MojoExecutionException
    {
        System.out.println(buildDir.getPath());

        // DOES NOT work, prints the literal string.
        System.out.println("${project.build.directory}");
    }

}
那感觉像是一个黑客。首先,我不需要将此参数公开给pom.xml。我这样做是因为在注释中,属性得到解析

我还想访问其他属性,即项目的依赖项

我在谷歌上搜索了好几个小时,运气不好。我找到的最接近MavenProject的插件,但我也无法让它工作,而且从外观上看,它自2009年以来一直没有更新过

Gradle在编写插件时为此提供了“project”变量。难道Maven就是不允许这样吗

---更新---

多亏了Robert与文档的链接,我才得以工作。令我吃惊的一件事是,project.build.directory在注入的项目中不可用。根据文件,你可以单独注射。下面是我添加到类中以获取项目对象和生成目录的内容:

@Parameter( defaultValue="${project}", readonly=true, required=true )
MavenProject project;

@Parameter( defaultValue = "${project.build.directory}", readonly=true, required=true )
private File target;
以及对我的pom的依赖:

  <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-project</artifactId>
      <version>3.0-alpha-2</version>
  </dependency>

org.apache.maven
马文项目
3.0-α-2

你走的路是对的,这不是黑客行为。但如果不想将其作为参数公开,则还应添加
readonly=true
。Maven还有
project
变量,请参阅,以获取可在项目中使用的所有常用对象。

在Maven插件中获取当前Maven项目的唯一方法是插入它


这描述了如何注入当前的Maven项目。

谢谢Robert。很高兴知道这是正确的方法。我已经用一些信息更新了上面的问题,这些信息是关于我特别添加了什么来让它工作的。