2011-06-06 88 views
0

我有幾個Maven項目,它們從父pom.xml中共享一些常用的設置 - 存儲庫,插件和通用依賴項。如何管理不在同一目錄結構中的maven子項目?

我想現在移動子項目來分離svn位置,以便他們可以擁有自己的生命週期,標籤,分支和樹幹。但是如果我從目錄結構中移動子項目,我將不得不重寫所有項目中的整個公共pom.xml。

是否有更好的方式來處理這個問題,以便子項目仍然可以共享一個共同的父pom.xml,而不會彼此相鄰(作爲文件夾)。

回答

1

我不知道爲什麼你必須顯式引用父pom文件。

我最常做的是有父POM作爲像這樣一個項目:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.blah.commons</groupId> 
    <artifactId>project-standards</artifactId> 
    <name>Common Standards</name> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
... 

注意<packaging>pom</packaging>元素

而且每個項目/模塊中,將取決於標準的POM。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
     http://maven.apache.org/maven-v4_0_0.xsd"> 

    <parent> 
     <groupId>com.blah.commons</groupId> 
     <artifactId>project-standards</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.blah.project</groupId> 
    <artifactId>xyz-core</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>project xyz core module</name> 
... 

注意<parent>元素。

4

我假設你已經定義了一個父pom.xml的是這樣的:

<parent> 
    <groupId>my.group</groupId> 
    <artifactId>name</artifactId> 
    <version>0.1.3-SNAPSHOT</version> 
    <relativePath>../pom.xml</relativePath> 
</parent> 

只需刪除元素<relativePath/>,則父像所有其他依賴訪問,無論是從本地資源庫或您自己的Nexus庫。因此,相對路徑不是必需的,這不依賴於目錄結構。

+0

+1這就是答案。請記住,您需要爲父項目提供自己的'mvn deploy'作業,以便將其安裝到您的存儲庫中,而不會自行獲取它們。 – 2011-06-06 18:56:31

+0

啊是的,這應該工作。但是,如果我檢查我的本地存儲庫(artifactory)中的父pom。我將不得不在所有子項目中添加倉庫設置(本地倉庫)。任何方式,我可以避免這樣做? – sheki 2011-06-07 04:57:36

+1

@Sheki我從來沒有使用過artifactory,但是如果它是你的**本地**版本庫,應該自動找到這個artifact?如果沒有,可以在你的'.m2/settings.xml'中配置。 – Thor 2011-06-07 10:00:37