我正在尝试创建我的第一个Maven插件,为此我需要在我的Mojos中访问MavenSession。我在很多地方发现下面的代码片段应该足够了,但是我总是将mavenSession对象作为null,尽管在Maven日志中(使用我的插件的POM.xml),似乎maven会话被传递,或者至少填充 - 但不会注入MavenSession对象。
任何人都可以告诉我我错过了什么吗?
谢谢!
/**
* The Maven Session
*
* @required
* @readonly
* @parameter
* expression="${session}"
*/
private MavenSession mavenSession;
我还将以下内容添加到插件的POM.xml中(基于我在某处找到的评论):
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.2.5</version>
</dependency>
这来自日志:
[DEBUG] Configuring mojo 'com.ofernicus.helpers:resource-helper:1.0-SNAPSHOT:iterate' with basic configurator -->
[DEBUG] (f) session = org.apache.maven.execution.MavenSession@1a785a79
[DEBUG] (f) mavenProject = MavenProject: com.ofernicus.consumers:resource-helper-consumer:1.0-SNAPSHOT @ C:\Users\oferlan\workspaces\Maven\PluginConsumer\resource-helper-consumer\pom.xml
答案 0 :(得分:2)
感谢此处的回复,我最终找到了问题:
我试图从execute()方法中调用的方法访问mavenSession和mavenProject。我假设一旦注入,这些成员就可以在我的Mojo范围内随处访问和填充 - 这是错误的。我将代码移到了execute()方法本身,问题得到了解决。
谢谢大家!
答案 1 :(得分:1)
错过参数注释:
@Parameter(defaultValue = "${session}")
private MavenSession session;
答案 2 :(得分:1)
看起来您有两个字段的引用:在您的代码中,您调用此字段mavenSession
,但在查看Maven的输出时,它引用session
。看起来您正在质疑一个没有正确注入MavenSession
的人。
答案 3 :(得分:0)
Maven使用plexus
将maven项目/ pom.xml
中的组件/元素注入到插件项目中,因此您必须确保包含相关的依赖项。
以下是您可以包含在pom.xml
中的完整依赖项列表,以便将所有必要的依赖项传递给您的项目。
并且更喜欢mojo annotations到mojo javadoc tags。您可以全面了解阅读this所涉及的插件工具。
<properties>
<pluginTools.version>3.3</pluginTools.version> <!-- be sure to use the latest version in here -->
</properties>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-tools-api</artifactId>
<version>${pluginTools.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>${pluginTools.version}</version>
<scope>provided</scope>
</dependency>