2016-03-21 140 views
2

與maven 3我有一個父項目'C:/ travail/parent'。 我有幾個孩子項目,由於各種原因,可以更改位置。 要進行戰爭,必須設置relativePath標記。Maven如何設置父pom的絕對路徑

<parent> 
    <groupId>framework.parent</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <relativePath>C:/Travail/parent/pom.xml</relativePath> 
</parent> 

問題:我怎樣才能把父的絕對路徑?以下不起作用。

<relativePath>/C:/Travail/parent/pom.xml</relativePath> 
+3

絕對不要使用父級的絕對路徑,只要移除' ...'元素。在你的父母上做一個'mvn install',它可以從你的本地回購庫中獲得,這意味着你不需要再定義relativePath .... – khmarbaise

回答

5

不能使用絕對路徑爲您父POM,配置條目的名稱本身是很自我解釋(相對路徑)。

從官方Maven model documentation該元素:

簽出中父pom.xml文件的相對路徑。如果未指定,則默認爲../pom.xml。 Maven先在文件系統上的這個位置查找父POM,然後在本地存儲庫中查找,最後在遠程回購庫中查找。 relativePath允許您選擇不同的位置,例如,當您的結構是平坦的,或更深時沒有中間父POM。但是,組ID,工件ID和版本仍然是必需的,並且必須與給定位置中的文件相匹配,否則它將恢復到POM的存儲庫。此功能僅用於增強該項目的本地結帳開發。將該值設置爲空字符串,以防止要禁用該功能並始終從存儲庫中解析父POM。
默認值爲../pom.xml

你甚至不能使用一個快捷方式或符號鏈接,與每個模塊一起分發並指向絕對文件位置,它不會工作(並且你不應該使用這種技巧無論如何,即使它正在工作)。

甚至不能使用屬性作爲relativePath元素的值佔位符。喜歡的東西:

<parent> 
    <groupId>framework.parent</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <relativePath>${path.to.parent}</relativePath> 
</parent> 

並嘗試在編譯的時候喜歡把它注射:

mvn clean install -Dpath.to.parent=C:/somewhere/pom.xml 

會根本沒有工作,也是由以下Maven票記載:


唯一合理的使用情況下對於該配置條目是,作爲正式文檔中提到的,對於平面結構的多模塊的項目,其中的模塊和父項目分別位於相同的目錄級別。

否則,更適合您的用例,您應該提供父pom作爲共享Maven存儲庫的一部分(如果有)或需要maven install(以便它可在本地maven緩存中使用)在對子/模塊項目進行任何必需的maven操作之前,對於任何新版本都提前完成父項目。

+0

如何在構建時注入它? – luckyging3r

+0

@ luckyging3r在這種情況下,它指的是從命令行指定目標或階段時,可以通過構建屬性注入另一個值,即使用動態值 –