【问题标题】:Dependent project not reading properties from parent POM依赖项目未从父 POM 读取属性
【发布时间】:2019-03-27 10:03:19
【问题描述】:

我的项目结构如下:

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 C 又依赖于Module A。现在,当我在Module D 上运行mvn clean install 时,考虑到它们共享同一个父级,我希望在父级中定义的属性可用,因此ModuleA.version 将解析为1.8 并使用。

但是,命令失败并出现错误:

The following artifacts could not be resolved: ModuleA:jar:${ModuleA.version}

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

在所有模块中,我都正确指定了父母。 即:Module CModule D 提到 Module B 作为父母。 Module BModule A 提到 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>

存储 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>

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

来源 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>

源 API POM

<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>

源 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>source-api</artifactId>
        <version>${project.version}</version>
    </dependency>

当我尝试构建 source-ws 时,构建失败并出现错误,${data-version} not found。

【问题讨论】:

  • 请出示pom文件...

标签: maven


【解决方案1】:

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

+- 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 installPD 上都成功(其中A 在前者打印the well-known [WARNING] 'version' contains an expression but should be a constant.,可以通过${revision} since Maven 3.5 解决)。

您能否确认您的 POM 在 &lt;parent&gt;s、&lt;properties&gt;${revision} 除外)、&lt;version&gt;s 和 &lt;dependencies&gt; 方面看起来相同?

【讨论】:

  • 我在描述中添加了 POM,以便更清楚地说明问题。
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 2020-11-02
  • 2021-02-27
  • 2020-04-26
  • 1970-01-01
  • 2011-01-28
  • 2020-07-12
  • 2017-07-28
相关资源
最近更新 更多