2016-03-27 106 views
1

我想寫一個maven擴展來計算每個構建會話的持續時間。這裏是我的分機:session.getCurrentProject()返回null - 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應該發送正在構建的項目的所有會話細節。我在不同的項目上嘗試過,但似乎不適合我。

+0

不知道這裏有什麼問題,但你可能想檢查[this](https://issues.apache.org/jira/browse/MNG-4639?focusedCommentId = 14421259&page = com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14421259) –

+0

https://github.com/khmarbaise/maven-buildtime-profiler和LifeCycleParticipant並不是解決問題的最佳方法這,導致EventSpy是一個更好的方法...此外LifeCycleParticipant只能用Maven 3.2.5+正確工作...... – khmarbaise

回答

1

我用這個更多地玩過,並且認爲它打印時從afterProjectsRead()打印這些細節。從官方文檔

粘貼:

afterSessionStart - MavenSession實例後,調用已創建 。此回調旨在允許擴展插入 執行屬性,激活配置文件並執行 影響MavenProject實例構造的類似任務。

afterProjectsRead - 在創建完所有MavenProject實例之後調用 。此回調旨在允許擴展在對它們進行排序並且實際構建執行 啓動之前操作MavenProjects。

所以我認爲MavenProject實例尚未在afterSessionStart()創建。 認爲它可以肯定更具描述性: -/