getCurrentProject()返回null-Maven扩展名

getCurrentProject()返回null-Maven扩展名,maven,maven-2,maven-3,maven-plugin,maven-extension,Maven,Maven 2,Maven 3,Maven Plugin,Maven Extension,我试图编写一个maven扩展来计算每个构建会话的持续时间。这是我的分机: @Parameter( defaultValue = "${project}", readonly = true, required = true ) private MavenProject project; @Component(role = AbstractMavenLifecycleParticipant.class) public class BuildTimeLogger extends Ab

我试图编写一个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应该发送正在构建的项目的所有会话细节。我在不同的项目上尝试过,但似乎对我不起作用

我又玩了一些,发现它在从
afterProjectsRead()
打印时确实会打印这些细节

从官方文件粘贴:

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

afterProjectsRead-在所有MavenProject实例都已加载后调用 创建。此回调旨在允许扩展操作 在对项目进行排序和实际构建执行之前对其进行MavenProjects 开始

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

不确定这里出了什么问题,但您可能想检查一下,LifeCycleParticipant不是解决这个问题的最佳方法,因为EventSpy是一种更好的方法……此外,LifeCycleParticipant只能在Maven 3.2.5+上正常工作。。。