从属项目不从父POM读取属性

时间:2019-03-27 10:03:19

标签: maven

我具有以下项目结构:

Parent
-- Module A
-- Module B
    -- Module C
    -- Module D

Parent具有以下属性:

<properties>
        <ModuleA.version>1.8</ModuleA.version>
</properties>

在模块C中,我使用A指定${ModuleA.version}的依赖项。

Module D取决于Module C,而后者又取决于Module A。现在,当我在mvn clean install上运行Module D时,考虑到它们共享同一父级,我期望父级中定义的属性将可用,因此ModuleA.version将解析为{ {1}}并使用。

但是,命令失败并显示以下错误:

1.8

有人可以帮我解决我在这里缺少的东西吗

在所有模块中,我都正确指定了父母。 也就是说:The following artifacts could not be resolved: ModuleA:jar:${ModuleA.version} Module C提到Module D作为父项。 Module BModule B提到Module A是父母。

实际POM如下: 父母

Parent

数据POM

<groupId>com.dummy</groupId>
<artifactId>parent</artifactId>
<version>0.15-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Parent</name>

<properties> <store-version>0.19-SNAPSHOT</store-version> 
             <data-version>0.16-SNAPSHOT</data-version>

</properties>

存储POM:

<parent>
<groupId>com.dummy</groupId>
<artifactId>parent</artifactId>
<version>0.15-SNAPSHOT</version>
<relativePath>../../parent</relativePath>

当我对商店项目使用mvn clean install时,它会找到数据版本,并且没有错误。

源POM

<parent>
        <groupId>com.dummy</groupId>
        <artifactId>parent</artifactId>
        <version>0.15-SNAPSHOT</version>
        <relativePath>../../parent</relativePath>
    </parent>

<dependency>
            <groupId>com.dummy</groupId>
            <artifactId>data</artifactId>
            <version>${data-version}</version>
            <scope>compile</scope>
        </dependency>

源API POM

<parent>
        <groupId>com.dummy</groupId>
        <artifactId>parent</artifactId>
        <version>0.15-SNAPSHOT</version>
        <relativePath>../parent</relativePath>
    </parent>
<artifactId>source</artifactId>
    <packaging>pom</packaging>
    <version>0.6-SNAPSHOT</version>

Source API构建良好,可以找到合适的版本。

来源WS

<parent>
        <groupId>com.dummy</groupId>
        <artifactId>source</artifactId>
        <version>0.6-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

<dependency>
            <groupId>com.dummy</groupId>
            <artifactId>store</artifactId>
            <version>${store.version}</version>
            <scope>compile</scope>
        </dependency>

当我尝试构建source-ws时,构建失败并显示错误,找不到$ {data-version}。

1 个答案:

答案 0 :(得分:0)

我根据您的描述创建了以下项目:

+- P
+- A  -> parent P
+- B  -> parent P
+- C  -> parent B, depends on A
+- D  -> parent B, depends on C

P的POM

<groupId>so.55374493</groupId>
<artifactId>P</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
    <ModuleA.version>1.8</ModuleA.version>
    <revision>1.8</revision>
</properties>

<modules>
    <module>../A</module>
    <module>../B</module>
</modules>

A的POM

<parent>
    <groupId>so.55374493</groupId>
    <artifactId>P</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../P</relativePath>
</parent>

<artifactId>A</artifactId>
<version>${ModuleA.version}</version>
<!-- use the following instead to omit: 
     "[WARNING] 'version' contains an expression but should be a constant." -->
<!-- <version>${revision}</version> -->

B的POM

<parent>
    <groupId>so.55374493</groupId>
    <artifactId>P</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../P</relativePath>
</parent>

<artifactId>B</artifactId>
<packaging>pom</packaging>

<modules>
    <module>../C</module>
    <module>../D</module>
</modules>

C的POM

<parent>
    <groupId>so.55374493</groupId>
    <artifactId>B</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../B</relativePath>
</parent>

<artifactId>C</artifactId>

<dependencies>
    <dependency>
        <groupId>so.55374493</groupId>
        <artifactId>A</artifactId>
        <version>${ModuleA.version}</version>
    </dependency>
</dependencies>

D的POM

<parent>
    <groupId>so.55374493</groupId>
    <artifactId>B</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../B</relativePath>
</parent>

<artifactId>D</artifactId>

<dependencies>
    <dependency>
        <groupId>so.55374493</groupId>
        <artifactId>C</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>
mvn installP上的

D都成功(其中前the well-known [WARNING] 'version' contains an expression but should be a constant.处的A打印,${revision} since Maven 3.5可以解决)

您能否确认您的POM在<parent><properties>${revision}除外),<version><dependencies>方面看起来是一样的?