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

时间:2015-02-27 20:31:04

标签: maven

我正在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>

2 个答案:

答案 0 :(得分:1)

你走的是正确的道路,而不是黑客。但是如果您不想将其作为参数公开,那么您还应该添加readonly=true。 Maven还有project变量,请参阅http://maven.apache.org/plugin-tools/maven-plugin-tools-annotations/了解您可以在项目中使用的所有常见对象。

答案 1 :(得分:0)

在Maven插件中获取当前Maven项目的唯一方法是注入它。 See this question for more info

See also the Mojo Cookbook描述了如何注入当前的Maven项目。