2011-07-20 48 views
0

我們正在研究包含很多模塊的相當大的項目,我們使用maven 2.2.1來構建它。 我們已經在主pom.xml中聲明瞭一些屬性,以便在一個地方擁有依賴版本。
這是我們的pom.xml的這一部分看起來像:Maven並不解釋某些孩子poms中的所有屬性

<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.as.common</groupId> 
<artifactId>caoas</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 
<name>AS :: caoas</name> 

<modules> 
    <module>common</module> 
    <module>services</module> 
    <module>datamanagement</module> 
</modules> 

<properties> 
    <jslee.version>1.1</jslee.version> 
    <rhino.version>2.1</rhino.version> 
    <diameterro.ra.version>2.2.0.1</diameterro.ra.version> 
    <cdr.ra.version>2.1.1.0</cdr.ra.version> 
    <cgin.ra.version>1.3.2</cgin.ra.version> 
    <cgin.oc-common.version>1.3.0</cgin.oc-common.version> 
    <cgin.in-datatypes.version>5.1.3.2</cgin.in-datatypes.version> 
    <ra.tracelevel>Finest</ra.tracelevel> 
</properties> 
    ... 
    </project> 

我們幾個模塊使用其屬性和在大部分時間裏他們是正確的解釋,但有一個問題,一個,其中只有部分是解釋和一些不是。
下面是pom.xml中的一部分:

<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.as.services</groupId> 
<artifactId>moc-sbb</artifactId> 
<version>1.0.1</version> 
<packaging>jainslee-sbb-jar</packaging> 
<name>AS :: services :: MOC-SBB</name> 

<parent> 
    <groupId>com.blah.as.services</groupId> 
    <artifactId>moc</artifactId> 
    <version>1.0.1</version> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>diameter-ro-ra-type</artifactId> 
     <version>${diameterro.ra.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>oc-common</artifactId> 
     <version>${cgin.oc-common.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>in-datatypes</artifactId> 
     <version>${cgin.in-datatypes.version}</version> 
     <scope>provided</scope> 
    </dependency> 
... 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>map_rel4.ratype</artifactId> 
     <version>${cgin.ra.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.blah.as</groupId> 
     <artifactId>correlation-ra-ratype</artifactId> 
     <version>1.0</version> 
     <type>jainslee-ratype-jar</type> 
    </dependency> 
</project> 

以「cgin」在這個pom.xml中(在其他模塊做工精細)等性能都很好沒有解釋所有屬性。

整個建造得很完美,但最近我們不得不改變模塊的版本,所以變化的影響當前模塊的版本,父模塊版本和一些依賴的版本,但這些只是局部性的依賴性有明確寫入版本。

有沒有人對這個問題進行了研究,或者有什麼想法在哪裏尋找理由來解決這種問題?

BR
Lucja

EDIT1
我用MVN -X -U全新安裝看起來更到構建,並沒有發現顯著的錯誤,我發現的唯一thig的是,在一些模塊中有表達式「使用的屬性」,有些模塊中不存在,有問題的模塊也沒有。我不知道它會如何影響這個模塊,因爲只有一些屬性不被讀取,有些屬性。

[DEBUG] properties used {... cgin.oc-common.version=1.3.0, ... cgin.ra.version=1.3.2, ... cdr.ra.version=2.1.1.0, ... diameterro.ra.version=2.2.0.1, ... cgin.in-datatypes.version=5.1.3.2, ...} 

EDIT2
這裏是整個POM。XML的模塊 'MOC'

<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.as.services</groupId> 
<artifactId>moc</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 
<name>AS :: services :: MOC</name> 

<parent> 
    <groupId>com.blah.as.services</groupId> 
    <artifactId>services</artifactId> 
    <version>1.0.1</version> 
</parent> 

<modules> 
    <module>moc-sbb</module> 
    <module>moc-du</module> 
</modules> 
</project> 

和模塊服務在這種情況下

<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.as.services</groupId> 
<artifactId>services</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 
<name>AS :: services</name> 

<parent> 
    <groupId>com.blah.as.common</groupId> 
    <artifactId>caoas</artifactId> 
    <version>1.0.0</version> 
</parent> 

<modules> 
    <module>moc</module> 
    <module>ussd</module> 
</modules> 
</project> 

模塊結構如下:
caoas(根)
|
服務
|
moc
|
MOC-SBB

下面是例如用於哪些屬性正常工作的另一模塊(結構從根顯示出葉節點)

<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.as.common</groupId> 
<artifactId>common</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 
<name>AS :: Common</name> 
<parent> 
    <groupId>com.blah.as.common</groupId> 
    <artifactId>caoas</artifactId> 
    <version>1.0.1</version> 
</parent> 

<modules> 
      <module>lib</module> 
    <module>ra</module> 
    <module>utils</module> 
    <module>patches</module>  
</modules> 

<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.as.common</groupId> 
<artifactId>common-lib</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 
<name>AS :: Common :: libs</name> 

<parent> 
    <groupId>com.blah.as.common</groupId> 
    <artifactId>common</artifactId> 
    <version>1.0.1</version> 
</parent> 

<modules> 

    <module>base</module> 
    <module>tracing</module> 
    <module>commons</module> 
    <module>diameter-ro-ext</module> 
    <module>location-retrieval</module> 
    <module>normalization</module> 
    <module>ticketing</module> 
    <module>profiles</module> 
    <module>notifications</module> 
    <module>screening</module> 
    <module>soap-tools</module> 
    <module>fsm</module> 
    <module>xmlbeans</module> 
    <module>sccp-address-selection</module> 
</modules> 

<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.as.common</groupId> 
<artifactId>location-retrieval</artifactId> 
<version>1.0.1</version> 
<packaging>pom</packaging> 
<name>AS :: Common :: Location Retrieval</name> 

<parent> 
    <groupId>com.blah.as.common</groupId> 
    <artifactId>common-lib</artifactId> 
    <version>1.0.1</version> 
</parent> 

<modules> 
    <module>location-retrieval-profiles-api</module>  
    <module>location-retrieval-intf-lib</module> 
    <module>location-retrieval-sbb-jar</module> 
    <module>location-retrieval-du</module> 
</modules> 

<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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<parent> 
    <groupId>com.blah.as.common</groupId> 
    <artifactId>location-retrieval</artifactId> 
    <version>1.0.1</version> 
</parent> 

<groupId>com.blah.as.common</groupId> 
<artifactId>location-retrieval-sbb-jar</artifactId> 
<version>1.0.1</version> 
<packaging>jainslee-sbb-jar</packaging> 
<name>AS :: Common :: Location Retrieval SBB</name> 


<dependencies> 

    <dependency> 
     <groupId>com.blah.as.common</groupId> 
     <artifactId>base-api</artifactId> 
     <version>1.0.1</version> 
    </dependency> 

    <dependency> 
     <groupId>com.blah.as.common</groupId> 
     <artifactId>location-retrieval-intf-lib</artifactId> 
     <version>1.0.1</version> 
    </dependency> 

    <dependency> 
     <groupId>com.blah.as.common</groupId> 
     <artifactId>location-retrieval-profiles-api</artifactId> 
     <version>1.0.1</version> 
    </dependency> 


    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>oc-common</artifactId> 
     <version>${cgin.oc-common.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>in-datatypes</artifactId> 
     <version>${cgin.in-datatypes.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>cgin-common.ratype</artifactId> 
     <version>${cgin.ra.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>cgin-common.events</artifactId> 
     <version>${cgin.ra.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>cgin-common</artifactId> 
     <version>${cgin.ra.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>map_rel4.api</artifactId> 
     <version>${cgin.ra.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>map_rel4.events</artifactId> 
     <version>${cgin.ra.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>opencloud</groupId> 
     <artifactId>map_rel4.ratype</artifactId> 
     <version>${cgin.ra.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.blah.as.common</groupId> 
     <artifactId>base-tracing-intf</artifactId> 
     <version>1.0.1</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 

它使用相同的屬性,並在這裏,他們工作得很好。

+0

請,加POM文件atrifact: com.blah.as.services MOC 1.0.1

+0

並添加POM文件爲成功編譯子模塊。 –

+0

你怎麼看待groupId屬性?可能會替換爲' com.blah.as.services'到' com.blah.as.commonmon'或' com.blah.as.common。服務'將解決您的問題(可能屬性具有groupId的可見性層次結構)。 –

回答

0

您服務POM指com.blah.as.common:caoas:1.0.0作爲其父項。在你的文章中,你向我們展示了版本1.0.1,而不是1.0.0。也許該屬性在版本1.0.0中不存在?

+0

root pom唯一的區別就是版本,但這是某種魔術,因爲它確實有效。非常感謝。 – Edheene

0

我總是確定root pom中的依賴版本。而不是確定子項目中的版本。子項目默認從父POM獲取依賴項版本。

E.g。

父POM:

... 
<groupId>ba.server</groupId> 
<artifactId>ba-server</artifactId> 
<packaging>pom</packaging> 
<name>ba-server</name> 
<version>0.16.22-SNAPSHOT</version> 
<dependencyManagement> 
    <dependencies> 

    <dependency> 
     <groupId>org.zeromq</groupId> 
     <artifactId>jzmq</artifactId> 
     <version>2.1.0-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>proxool</groupId> 
     <artifactId>proxool </artifactId> 
     <version>0.8.3</version> 
    </dependency> 
... 

兒童POM:

... 
<parent> 
    <groupId>ba.server</groupId> 
    <artifactId>ba-serer</artifactId> 
    <version>0.16.22-SNAPSHOT</version> 
</parent> 
<packaging>jar</packaging> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>ba-server-kernel</artifactId> 
<name>ba-server-kernel</name> 
<dependencies> 
    <dependency> 
     <groupId>org.zeromq</groupId> 
     <artifactId>jzmq</artifactId> 
    </dependency> 
... 
+0

你是否必須將這些依賴關係包含在子pom中?他們不應該被遺傳嗎?無論如何,這不是我的情況。我們不包括根pom中的依賴項,僅在子項目pom中,因爲我們不需要所有模塊中的依賴項。只有版本在root pom中聲明爲屬性。 – Edheene

+0

' pom'表示父項目不在應用程序或庫中。這意味着它是整體設置的容器(依賴關係就是我的情況)。當然,兒童項目中不會有所有的依賴關係 - 只有那些您在兒童項目中確定的依賴關係。 –

+0

我編輯了我的例子:我確定父項目中的2個依賴項,但在子項目中只使用1個。 –

0

看起來,你的孩子模塊是指一個錯誤的父POM。在你的父POM你已經宣佈的artifactId爲「caoas」:

<artifactId>caoas</artifactId> 

但在你的孩子POM你指的另一個父,與artifactId的「商務部」:

<parent> 
    <groupId>com.blah.as.services</groupId> 
    <artifactId>moc</artifactId> 
    <version>1.0.1</version> 
</parent> 
+0

整個項目樹大於兩層,我在這裏只顯示了根和葉子模塊,但是之間還有兩個poms。 – Edheene

相關問題