Maven 2 Maven没有';t解释某些子POM中的所有属性

Maven 2 Maven没有';t解释某些子POM中的所有属性,maven-2,module,properties,dependencies,version,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.apac

我们正在进行一个包含许多模块的大型项目,我们使用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>
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>  

4.0.0
com.blah.as.services
商务部
1.0.1
聚甲醛
AS::services::MOC
com.blah.as.services
服务
1.0.1
商务部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.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>  

4.0.0
com.blah.as.services
服务
1.0.1
聚甲醛
AS::服务
com.blah.as.common
曹阿斯
1.0.0
商务部
ussd
本例中的模块结构如下所示:
caoas(根)
|
服务
|
主运行中心
|
商务部sbb

下面是另一个模块的示例,其中属性工作正常(从根节点到叶节点显示的结构)


4.0.0
com.blah.as.common
常见的
1.0.1
聚甲醛
AS::Common
com.blah.as.common
曹阿斯
1.0.1
解放党
类风湿关节炎
乌提尔斯
补丁


4.0.0
com.blah.as.common
公共库
1.0.1
聚甲醛
AS::Common::libs
com.blah.as.common
常见的
1.0.1
基础
追踪
平民
外直径
位置检索
规范化
票务
轮廓
通知
筛选
soap工具
密克罗尼西亚联邦
xmlbeans
sccp地址选择


4.0.0
com.blah.as.common
位置检索
1.0.1
聚甲醛
AS::Common::位置检索
com.blah.as.common
公共库
1.0.1
位置检索配置文件api
位置检索intf库
位置检索sbb jar
位置检索


4.0.0
com.blah.as.common
位置检索
1.0.1
com.blah.as.common
位置检索sbb jar
1.0.1
贾恩斯利sbb罐
AS::Common::位置检索SBB
com.blah.as.common
基本api
1.0.1
com.blah.as.common
位置检索intf库
1.0.1 
com.blah.as.common
位置检索配置文件api
1.0.1
opencloud
oc普通
${cgin.oc common.version}
opencloud
在数据类型中
${cgin.in datatypes.version}
opencloud
cgin-common.ratype
${cgin.ra.version}
opencloud
cgin-common.events
${cgin.ra.version}
opencloud
共同点
${cgin.ra.version}
opencloud
map_rel4.api
${cgin.ra.version}
opencloud
映射4.0事件
${cgin.ra.version}
opencloud
地图4.ratype
${cgin.ra.version}
com.blah.as.common
基跟踪intf
1.0.1
罐子


它使用相同的属性,在这里它们工作得很好。

我总是在根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>
...
...
<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>
...
。。。
ba.server
ba服务器
聚甲醛
ba服务器
0.16.22-快照
org.zeromq
jzmq
2.1.0-快照
普罗索
普罗索
0.8.3
...
子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>
...
...
<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>
...
。。。
ba.server
巴塞尔
0.16.22-快照
罐子
4.0.0
ba服务器内核
ba服务器内核
org.zeromq
jzmq
...

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

<artifactId>caoas</artifactId>
caoas
但在您的孩子POM中,您指的是另一位家长,带有artifactId“moc”:

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

com.blah.as.services
商务部
1.0.1

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

是否必须在子pom中包含这些依赖项?他们不应该被继承吗?无论如何,这不是我的情况。我们不在根pom中包含依赖项,只在子pom中包含依赖项,因为我们不需要在所有模块中都包含这些依赖项。只有版本在根pom中声明为属性。
pom
表示父项目不在应用程序或库中。这意味着它是整个设置的容器(依赖项是我的情况)。当然,子项目中不会有所有依赖项,只有您在子项目中确定的依赖项。我编辑了我的示例:我在父项目中确定2个依赖项,但在子项目中仅使用1个。好的,我理解,但我不想更改项目的整个结构,因为,正如我在问题描述中所说,它以前工作过,但我在更改某些模块版本时一定弄坏了一些东西,因此我正在寻找maven不解释属性的确切原因。请尝试:
mvn-X-U clean install deploy
。首先是父项目,然后是子项目。如果您会发现一些错误,请将它们附加到您的问题中。整个项目树大于两层,我在这里只显示了根模块和叶模块,但中间还有两个POM。请,为atrifact:com.blah.as.services moc 1.0.1添加pom文件,并为成功编译的子模块添加pom文件。您如何看待groupId属性?可以将
com.blah.as.services
替换为
com.blah.as.common
com.blah.as.common.services
将解决您的问题(可能是属性按groupId具有可见性层次结构)。根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>
...
...
<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>
...
<artifactId>caoas</artifactId>
<parent>
  <groupId>com.blah.as.services</groupId>
  <artifactId>moc</artifactId>
  <version>1.0.1</version>
</parent>