【问题标题】:MavenSession not populated未填充 MavenSession
【发布时间】:2015-02-23 04:33:05
【问题描述】:

我正在尝试创建我的第一个 Maven 插件,为此我需要在我的 Mojos 中访问 MavenSession。我在很多地方发现下面的 sn-p 应该就足够了,但我总是以 mavenSession 对象为空,尽管在 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

【问题讨论】:

  • 你说的是(单元)测试时间还是运行时间?
  • @RobertScholte - 我猜你会称之为运行时 - 我正在尝试从不同/单独的 Maven 项目中调用此插件。
  • null 在哪里?就在您的 execute 方法的开头?
  • 那么其他属性呢?注射的好吗?
  • 你能展示你完整的pom吗?

标签: java maven maven-plugin


【解决方案1】:

感谢这里的回复,我终于找到了问题:

我试图从 execute() 方法调用的方法访问 mavenSession 和 mavenProject。我假设一旦注入,这些成员在我的 Mojo 范围内的任何地方都可以访问和填充——这是错误的。我将我的代码移到了 execute() 方法本身,问题就解决了。

谢谢大家!

【讨论】:

    【解决方案2】:

    遗漏参数注释:

    @Parameter(defaultValue = "${session}")
    private MavenSession session;
    

    【讨论】:

    • 谢谢,Hersh - 我尝试了你的建议,但我仍然将 (MavenSession) 会话设为空。
    • @Hersh,不,OP没有错过参数注释,他/她使用了javadoc tag,虽然不推荐仍然可以工作。
    【解决方案3】:

    看起来您引用了两个字段:在您的代码中,您将此字段称为 mavenSession,但在查看 Maven 的输出时,它指的是 session。看起来你在质疑一个没有正确注入 MavenSession 的问题。

    【讨论】:

    • 我实际上已经定义了 session 和 mavenSession,一旦通过 @Parameter 注入,一个通过 JavaDoc 标签注入 - 但两者都是空的。无论如何 - 问题现在已解决(正如我在自己的答案中添加的那样)。
    【解决方案4】:

    Maven 在后台使用plexus 将来自maven 项目/pom.xml 的组件/元素注入到插件项目中,因此您必须确保包含相关依赖项。

    这是一个完整的依赖项列表,您可以将其包含到您的 pom.xml 中,以便将所有必要的依赖项传递到您的项目中。

    比起mojo javadoc tags,更喜欢mojo annotations。阅读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>
    

    【讨论】:

    • 表达式:Maven uses pluxus 不再正确,因为 Maven 3.0 它在引擎盖下使用了 guice。但它有兼容层(sisu)来支持旧插件(见jira.codehaus.org/browse/MNG-4749)。
    猜你喜欢
    • 2021-05-06
    • 2016-07-11
    • 2012-03-28
    • 2020-02-21
    • 2019-01-31
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多