我正在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>
答案 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项目。