gpt4 book ai didi

java - Maven多模块依赖问题

转载 作者:行者123 更新时间:2023-12-02 10:14:14 25 4
gpt4 key购买 nike

我有一个主项目 pom.xml 的问题。这指定了应用程序的两个主要模块。这个主 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.xml 中定义的。当我构建整个项目时,这很有效。但当我尝试构建子模块 2 时出现问题:

[ERROR] Failed to execute goal on project sub.module.2: Could not resolve dependencies for project com.maven.showcase:sub.module.2:jar:2.2.2-SNAPSHOT: Failed to collect dependencies at com.maven.showcase:sub.module.1:jar:1.1.1-SNAPSHOT: Failed to read artifact descriptor for com.maven.showcase:sub.module.1:jar:1.1.1-SNAPSHOT: Could not find artifact com.maven.showcase:main.module.1:pom:${revision} in central (https://repo.maven.apache.org/maven2) -> [Help 1]

我完全可以理解为什么会发生这种情况,因为当我只构建子模块2时,主模块的pom实际上从未被解析,所以maven不知道在“修订”的位置放置什么。

问题是:有没有更好的方法来解决这个问题?我无法让全局属性起作用,因为如果我尝试使用我在父 pom 中定义的属性,我会不断收到“父 pom 定义中禁止属性”的信息。 (Maven 3.5.3)

出于各种原因,我需要能够构建单独的子模块,例如获取 Maven 依赖关系树。

谢谢,彼得

最佳答案

不要使用版本号占位符!版本对于 maven 来说是关键,不应该被抽象化。

请检查“mvn versions:set”插件。如果您必须更改版本号,它将为您提供帮助。它会在所有必要的地方自动更改它。有了这个,你不应该再觉得需要占位符了。 ;)

关于java - Maven多模块依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54784174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com