Maven 无法解决同一多模块项目中模块的依赖关系

2022-08-31 12:15:18

运行命令时,例如

mvn dependency:build-classpath

mvn exec:java

Maven 无法解析我的一个模块对另一个模块的依赖关系。

[错误]未能在项目解析器应用程序上执行目标:无法解析项目project_group:A:jar:0.1-快照:找不到工件 project_group:B:jar:0.1-快照

项目结构如下:

/pom.xml
/A/pom.xml
/B/pom.xml

父 pom 如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>project_group</groupId>
  <artifactId>parent</artifactId>
  <packaging>pom</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>parent</name>

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

第一个子模块(无法解析依赖关系的子模块):

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>A</artifactId>
  <packaging>jar</packaging>
  <name>A</name>

  <dependencies>
    <dependency>
      <groupId>parent_group</groupId>
      <artifactId>B</artifactId>
      <version>0.1-SNAPSHOT</version>
    </dependency>

第二个子模块(依赖项):

  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>parent_group</groupId>
    <artifactId>parent</artifactId>
    <version>0.1-SNAPSHOT</version>
  </parent>
  <artifactId>B</artifactId>
  <packaging>jar</packaging>
  <name>B</name>

答案 1

您是否在项目上运行至少一次以在本地存储库中安装依赖项?mvn clean install


答案 2

Maven反应堆很奇怪,它只为某些任务保留了模块。当运行一个只对一个子项目执行某些操作的构建目标时,即使 Maven 首先构建依赖项,它也不会将它们保留在反应器中(有时)。

安装到本地存储库是一种解决方法,但它很可怕,应该尽可能避免,因为您很容易最终得到过时的构建结果。

一个稍微不那么丑陋的解决方法是将两个构建目标组合在一起,其中第二个构建目标做一些无害的事情,但在所有子项目中触发对反应堆的添加。

例如,您可以将所需的任务与“编译”或“打包”任务组合在一起。

另请参阅在运行 mvn 依赖项时 Maven 无法识别同级模块的最高投票答案:tree


推荐