2011-10-18 133 views

回答

5

Codehaus,有行家財產${basedir}

如果你有一個屬性在你的資源,它具有${basedir}佔位符文件,並enable filtering for the resources plugin,你會發現,還有的BASEDIR的編譯時間代入屬性文件。然後您可以使用代碼中的Properties實例加載此代碼。

在/ SRC /主/資源,創建一個名爲project.properties文件,含有

project.basedir=${basedir} 

然後,在POM,使濾波/ SRC /主/資源,如在行家資源概述過濾鏈接上面的文檔。

然後,在代碼,在運行時,裝入特性文件的成Properties實例

Properties props = new Properties(); 
props.load(this.getClass().getResourceAsStream("project.properties")); 
String basedir = props.get("project.basedir"); 

另一種方法是處理某些源文件和通過掛鉤到process-sources相位做替換在那裏,但是這不太容易解釋。

+0

我在我的POM中使用了$ {basedir}屬性,它工作正常,但是如何在Java代碼中獲取? –

+0

按照上面的說明。我會嘗試使路徑更清晰 – ptomli

+0

@ptomli當我將$ {project.version}寫入我的pom文件時,我可以檢索它的值,但是當我將它寫入屬性文件時,我不能。我正在開發一個定製的Maven插件,我該怎麼做? – kamaci

3

你不能,因爲maven用於構建,並且在構建之後不「存在」。

如果您在構建過程中需要(例如通過exec插件),那麼它可以作爲系統參數訪問,也可以作爲參數傳遞給執行的程序。

+0

我在Maven站點找到了這個代碼file = new File(project.getBasedir(),file);但我不知道如何獲得這個項目對象http://maven.apache.org/plugin-developers/common-bugs.html#Resolving_Relative_Paths –

+2

@FerasOdeh:你在開發一個插件嗎?如果不是,該網站不會幫助你。 –

+0

你在說要寫一個maven插件嗎?如果這是真的,那麼你可以通過maven插件API訪問'project'。 – ptomli

3

我假設你想從'exec:exec'或'test'運行時這個。如果是這種情況,您可以通過

System.getProperties().get("basedir") 
+0

這不起作用。它的功能是告訴maven-exec-plugin使用Maven的$ {project.basedir}來傳遞一個系統屬性(如你所願命名)。是這樣的: \t \t \t BASEDIR \t \t $ {} project.basedir \t

+0

該解決方案適用於我的行家3.0 .3,但顯然它不僅僅是從IDE中的maven *和*開始工作。 – pforhan