MavenSession没有填充

时间:2014-12-25 12:54:24

标签: java maven maven-plugin

我正在尝试创建我的第一个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

4 个答案:

答案 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 annotationsmojo 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>