Maven没有解释某些儿童poms中的所有属性

时间:2011-07-20 07:04:10

标签: maven-2 module properties dependencies version

我们正在开发包含许多模块的大型项目,我们使用maven 2.2.1来构建它。 我们在master pom.xml中声明了一些属性,以便在一个地方拥有依赖版本 这就是我们的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.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 clean install来查看构建并发现没有重大错误,我发现的唯一的一点就是在某些模块中有表达“使用的属性”而在某些模块中它不存在,有问题模块也没有它。我不知道它会如何影响这个模块,因为只有一些属性不被读取而有些属性被读取。

[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
这是模块'moc'

的整个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</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(root)
  |
服务
  |
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>

它使用相同的属性,在这里它们可以正常工作。

3 个答案:

答案 0 :(得分:0)

我总是在root pom中确定依赖项版本。而不是确定子项目中的版本。子项目默认从父pom获得依赖版本。

电子。克。

家长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>
...

答案 1 :(得分:0)

看起来您的子模块引用了错误的父POM。在您的父POM中,您已将artifactId声明为“caoas”:

<artifactId>caoas</artifactId>

但在您的孩子POM中,您使用artifactId'moc':

引用另一个父母
<parent>
  <groupId>com.blah.as.services</groupId>
  <artifactId>moc</artifactId>
  <version>1.0.1</version>
</parent>

答案 2 :(得分:0)

您的服务pom是指com.blah.as.common:caoas:1.0.0作为其父级。在您的帖子中,您向我们展示了版本1.0.1,而不是1.0.0。也许版本1.0.0中不存在该属性?