【问题标题】:session.getCurrentProject() returns null - Maven extensionssession.getCurrentProject() 返回 null - Maven 扩展
【发布时间】:2016-07-14 13:27:51
【问题描述】:

我正在尝试编写一个 Maven 扩展来计算每个构建会话的持续时间。这是我的扩展:

  @Parameter( defaultValue = "${project}", readonly = true, required = true )
  private MavenProject project;

  @Component(role = AbstractMavenLifecycleParticipant.class)
  public class BuildTimeLogger extends AbstractMavenLifecycleParticipant {

  public void afterSessionStart(MavenSession session) throws MavenExecutionException {

      System.out.println("${project}: "+project);
      System.out.println("Top level project:"+session.getTopLevelProject());
 System.out.println("session.getcurrentproject():"+session.getCurrentProject());       }  
    }

我不确定为什么上述所有打印语句都打印null。我是否正确使用会话对象?我的理解是 Maven 应该发送正在构建的项目的所有会话细节。我在不同的项目上试过这个,但似乎对我不起作用。

【问题讨论】:

  • 不确定这里出了什么问题,但您可能需要检查this
  • github.com/khmarbaise/maven-buildtime-profiler 和 LifeCycleParticipant 不是解决这个问题的最佳方法,因为 EventSpy 是更好的方法......此外,LifeCycleParticipant 只能在 Maven 3.2.5+ 上正常工作......

标签: maven maven-2 maven-3 maven-plugin maven-extension


【解决方案1】:

我对此进行了更多尝试,并发现当从afterProjectsRead() 打印时,它确实会打印这些详细信息。

从官方文档中粘贴:

afterSessionStart - 在 MavenSession 实例完成后调用 创建。此回调旨在允许扩展注入 执行属性,激活配置文件并执行类似的任务 影响MavenProject实例构建。

afterProjectsRead - 在所有 MavenProject 实例都被调用后调用 创建。此回调旨在允许扩展操作 排序和实际构建执行之前的 MavenProjects 开始。

所以我认为 MavenProject 实例尚未在 afterSessionStart() 处创建。 认为它肯定可以更具描述性:-/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 2015-10-04
    • 2015-11-06
    • 2023-03-05
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多