我有一个主要项目pom的问题。这指定了应用程序的两个主要模块。这个主要pom包含一些常见的依赖项定义:
父母:
<groupId>com.maven.showcase</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0.0-SNAPSHOT</version>
<modules>
<module>main.module.1</module>
<module>main.module.2</module>
</modules>
<properties>
<main.module.1.version>1.1.1-SNAPSHOT</main.module.1.version>
<main.module.2.version>2.2.2-SNAPSHOT</main.module.2.version>
</properties>
此处定义了两个主要模块的版本。每个主模块的版本以及该模块中所有子模块的版本都相同。我拥有$ {revision}属性来实现此目的。
主pom 1:
<parent>
<artifactId>parent</artifactId>
<groupId>com.maven.showcase</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>main.module.1</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<properties>
<revision>${main.module.1.version}</revision>
</properties>
<modules>
<module>sub.module.1</module>
</modules>
主pom 2:
<parent>
<artifactId>parent</artifactId>
<groupId>com.maven.showcase</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>main.module.2</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<properties>
<revision>${main.module.2.version}</revision>
</properties>
<modules>
<module>sub.module.2</module>
</modules>
每个模块都包含一个子模块。
子模块1:
<parent>
<artifactId>main.module.1</artifactId>
<groupId>com.maven.showcase</groupId>
<version>${revision}</version>
</parent>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>sub.module.1</artifactId>
子模块2:
<parent>
<artifactId>main.module.2</artifactId>
<groupId>com.maven.showcase</groupId>
<version>${revision}</version>
</parent>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>sub.module.2</artifactId>
<dependencies>
<dependency>
<artifactId>sub.module.1</artifactId>
<groupId>com.maven.showcase</groupId>
<version>${main.module.1.version}</version>
</dependency>
</dependencies>
如您所见,子模块2引用子模块1作为依赖项。是主pom中定义的那个。当我构建整个项目时,此方法效果很好。但是,当我尝试构建子模块2时出现问题:
[错误]无法在项目sub.module.2上执行目标:无法 解决项目的依赖关系 com.maven.showcase:sub.module.2:jar:2.2.2-SNAPSHOT:无法收集 com.maven.showcase:sub.module.1:jar:1.1.1-SNAPSHOT上的依赖项: 无法读取工件描述符 com.maven.showcase:sub.module.1:jar:1.1.1-SNAPSHOT:找不到 中央的工件com.maven.showcase:main.module.1:pom:$ {revision} (https://repo.maven.apache.org/maven2)-> [帮助1]
我完全可以理解为什么会发生这种情况,因为当我仅构建子模块2时,就不会真正解析主模块的pom,因此maven不知道该用什么来代替“修订”。
问题是:是否有更好的方法来解决此问题?我无法使用全局属性,因为如果我尝试使用在父pom中定义的属性,就会不断收到“在父pom定义中禁止使用属性”。 (Maven 3.5.3)
出于各种原因,例如,为了获得Maven依赖树,我需要能够构建单独的子模块。
谢谢, 朋友
答案 0 :(得分:1)
请勿将占位符用于版本号!该版本是Maven的关键,不应抽象化。
请检查“ mvn版本:设置”插件。如果您必须更改版本号,它将为您提供帮助。它将在所有必要的地方自动更改它。您不应该再对此感到占位符了。 ;)