2017-06-21 51 views
1

我正在開發一個maven插件,我需要獲取多模塊項目的根目錄。從Mojo獲取多模塊maven項目的根目錄

With mavenProject.getBuild().getDirectory()我可以得到當前模塊的路徑,好吧。

所以想我會嘗試獲得root MavenProject,但getRootProject()定義見下文,getRootProject().getBuild().getDirectory()回報"${project.basedir}"(字面字符串的值...我不知道如何解決,即使我沒有解決這個問題它會解析爲當前模塊,這不是我想要的)。

@Parameter(defaultValue = "${project}", readonly = true) 
private MavenProject mavenProject; 
// ... 
private MavenProject getRootProject() { 
    MavenProject project = mavenProject; 
    while (project.getParent() != null) { 
     project = project.getParent(); 
    } 
    return project; 
} 

我如何(解決&絕對)路徑根模塊?

+0

找到了一個我自己的解決方案(共享如下),但仍然對上面描述的'$ {project.basedir}'的行爲感到好奇......並且woul D也欣賞,如果提供其他解決方案:) –

+0

我會問爲什麼你需要他的一個插件內的多模塊構建的根級別? – khmarbaise

+0

這是一個報告插件。由於與我的組織有關的原因,我需要收集每個模塊(及其依賴項)的詳細信息,並將該信息寫入整個樹的根模塊的「目標」目錄下。我需要的信息很容易通過maven獲得,並且很難在maven之外獲得,因此maven插件似乎是一個好主意。 –

回答

1

由於this answer與同一問題從不同的角度(不是從魔)交易,我發現了一個解決方案:

以下字段添加到我的Mojo:

@Parameter(defaultValue = "${session}", readonly = true) 
private MavenSession mavenSession; 

然後這樣使用它:

mavenSession.getExecutionRootDirectory()