1

我正在尝试编写一个 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());       }  
    }

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

4

1 回答 1

1

我对此进行了更多尝试,并认为它在打印时确实会打印这些详细信息afterProjectsRead()

从官方文档粘贴:

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

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

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

于 2016-03-27T03:24:42.930 回答