目录
- 一、报错情形
- 1、项目构架
- 2、报错信息
- 3、分析错误
- 二、错误解决
- 1、原因一解决方案
- 2、原因二解决方案
- 3、解决如图
- 三、注意事项
一、报错情形
存在三个功能模块(各自独立的),有功能模块 test 、test1、test2
test中存在test-interface子模块,test1中存在test1-interface子模块,test2中存在test2-server子模块
test1-interface 依赖于 test-interface子模块,而 test2-server 依赖于 test1-interface子模块、同时依赖于 test-interface子模块
架构图如下:
test1报错:
Failed to execute goal on project test1-interface: Could not resolve dependencies for project com.xxx:
test-interface:jar:1.0.0: Failed to collect dependencies at com.xxx:test-interface:jar:1.0.0: Failed to read
artifact descriptor for com.xxx:test-interface:jar:1.0.0: Could not find artifact com.xxx:test:pom:1.0.0 in AAA
(http://xxx.xxx.xxx.xxx:8081/xxx/xxx) -> [Help 1]
翻译如下:
无法在项目产品上执行目标 - 通用:无法解析项目com.xxx的依赖项:test1-interface:1.0.0:无法在com.xxx收集依赖项:
test-interface:jar:1.0.0:无法读取com.xxx的工件描述符:test-interface:jar:1.0.0:在AAA中找不到工件com.xxx:test:pom:
1.0.0(http://xxx.xxx.xxx.xxx:8081/xxx/xxx)
大致理解:
在 test1 中存在不可解析的类或方法,因为所 test-interface 包不存在,其原因是因为在指定路径
(http://xxx.xxx.xxx.xxx:8081/xxx/xxx)中不存在这个依赖包
test2报错:
Failed to execute goal on project test2-server: Could not resolve dependencies for project com.xxx:
test1-interface:jar:1.0.0: Failed to collect dependencies at com.xxx:test1-interface:jar:1.0.0: Failed to read
artifact descriptor for com.xxx:test1-interface:jar:1.0.0: Could not find artifact com.xxx:test1:pom:1.0.0 in AAA
(http://xxx.xxx.xxx.xxx:8081/xxx/xxx) -> [Help 1]
翻译如下:
无法在项目产品上执行目标 - 通用:无法解析项目com.xxx的依赖项:test2-server:1.0.0:无法在com.xxx收集依赖项:
test1-interface:jar:1.0.0:无法读取com.xxx的工件描述符:test1-interface:jar:1.0.0:在AAA中找不到工件com.xxx:test1:pom:
1.0.0(http://xxx.xxx.xxx.xxx:8081/xxx/xxx)
大致理解:
在 test2 中存在不可解析的类或方法,因为所 test1-interface 包不存在,其原因是因为在指定路径
(http://xxx.xxx.xxx.xxx:8081/xxx/xxx)中不存在这个依赖包;而根据上面的架构图可知,其最根本原因是不存在 test-interface 包
由上面可知,存在两种可能
一是maven本地仓库没有这个依赖包,并且配置文件中的远程仓库路径错误(不存在这个依赖包)
二是maven本地仓库没有这个依赖包,并且本地没有打包生成依赖包(针对3个功能模块都在本地)
二、错误解决
该原因主要是在本地没有 test 功能模块时,才可能存在
若是本地有 test 功能模块,可直接在本地打包生成依赖包(具体见原因二解决方案)
从根本入手:
先生成 test-interface 子模块的包,在处理 test功能模块(解决 test1 报错)
再生成 test1-interface 子模块的包,再处理 test1 功能模块(解决 test2 报错)
三、注意事项
在 父工程的 pom 文件中加入maven的编译依赖组件; 需指定与idea所用java通个版本的jdk编译
在与其他工程(包括子工程与子工程之间)存在依赖关系时, 必要的组件
并且在打包编译时, 需要 先clean install一下父工程 ; 再走各个子工程的打包编译
<build>
<pluginManagement>
<plugins>
<!-- 加入maven的打包依赖组件; SpringBoot的组件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 加入maven的编译依赖组件; 需指定与idea所用java通个版本的jdk编译 -->
<!-- 在与其他工程(包括子工程与子工程之间)存在依赖关系时, 必要的组件 -->
<!-- 并且在打包编译时, 需要先clean install一下父工程; 再走各个子工程的打包编译 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<!-- 一般而言,target与source是保持一致的,
但是,有时候为了让程序能在其他版本的jdk中运行
(对于低版本目标jdk,源代码中没有使用低版本jdk中不支持的语法),
会存在target不同于source的情况 -->
<!-- 源代码使用的开发版本 -->
<source>1.8</source>
<!-- 需要生成的目标class文件的编译版本 -->
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>