我具有以下项目结构:
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 B
和Module 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}。
答案 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 install
和P
上的 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>
方面看起来是一样的?>