可以从自定义插件访问Maven项目信息吗?
我正在用Maven编写一个自定义插件,希望访问有关该项目的信息。作为一个简单的例子,在我的Java代码中,我想获取项目的构建目录。我知道我可以使用如下参数注释获得它:可以从自定义插件访问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
@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。很高兴知道这是正确的方法。我已经用一些信息更新了上面的问题,这些信息是关于我特别添加了什么来让它工作的。