一、起因

  A模块依赖B模块,B模块依赖C模块(C模块是其他项目中的jar);A模块需要用到C模块中的类,通过B模块间接依赖了C模块。此时打包A的时候报错,大致意思是,无法编译使用C模块中的类。
给A模块打包,执行命令:

mvn clean install

出现以下错误:

Error:(8,52) java: 程序包com.demo.utils.common.response不存在
Error:(27,5) java: 找不到符号
Error:(35,5) java: 找不到符号
...

这个“com.demo.utils.common.response”就是上面说C模块中的包。
编译报错,熟悉的味道。。。
截图中报红的Error随便找一个双击一下,跳转到代码中查看下:

尼玛,这代码也没报红啊。开始排查吧~
ps:代码中也报红就简单了,那明显就是缺少jar包,添加对应的maven依赖就行了。

注意:此时报红的地方,都是B模块所依赖jar中的类,即A模块通过B模块间接依赖的类。

二、排查

1. 仔细看错误提示

遇到错误不要慌、不要急,不要放过任何一个报错细节!仔细看,其实会发现截图中的一个警告
摘出来是这样的:

The POM for com.demo:demo-common:jar:1.1.22 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details

翻译过来是:demo:demo-common:jar:1.1.22的POM无效,传递依赖项(如果有)不可用,请启用调试日志记录以获得更多细节。
提示很清楚,你依赖的这个common包(就是我们说的B模块)传递依赖项不可用了!也就是说我们A模块,通过B模块间接依赖的包,都不可用了。
为啥不可用,我们看看调试日志吧~

2. debug模式重新install

我们进入到子模块,使用-X参数查看debug信息,比如我刚才打包的子模块是client:

cd client
mvn clean install -X

搜索上面的报错信息:The POM for com.demo:demo-common:jar:1.1.22 is invalid

很容易就能搜到,真正的错误信息就在你搜索的下一行,看截图中标红的位置。

3. 分析错误[ERROR]

当然,每个人的错误可能不一样,我的错误是’dependencies.dependency.version’ for com.demo.xxx:demo-xxx:jar is missing ,意思是demo-xxx这个jar包找不到。demo-xxx(C模块)这个包是B模块依赖的包,为什么会提示缺失呢?

检查B模块的pom.xml

在B模块的pom.xml中,发现demo-xxx(C模块)这个依赖,在B模块的pom.xml中没有配置版本!

<dependency><groupId>com.demo</groupId><artifactId>demo-xxx</artifactId>
</dependency>

没什么奇怪的,那会使用父项目(即A模块)中定义的版本。但是父项目中定义这个依赖的版本了啊!

注意哈:B模块不一定是使用当前代码父模块中的pom.xml,要看下B模块中pom.xml定义的父模块的版本,如下图。但是我工程的父pom版本却是1.1.0-SNAPSHOT!!!

所以要去maven私服中查看1.0.0这个父pom.xml中到底有没有定义demo-xxx(C模块)这个依赖的版本。

结论:我去私服上查了下,1.0.0这个父pom.xml中,确实没有定义demo-xxx(C模块)这个依赖的版本,所以导致B模块的pom.xml解析出错(因为C模块不知道使用哪个版本),进而导致B模块依赖的所有包都无法下载!最终导致install A模块的时候报错!

三、解决
  • 方式一:在A模块中直接依赖demo-xxx这个jar
    原理:因为A模块直接依赖父项目,而且当前父项目的pom.xml代码中也已经声明了demo-xxx.jar的版本,所以A能直接使用。但A依赖B时不能使用,是因为间接依赖不能使用本地pom.xml代码,需要使用私服中真正的pom.xml!
  • 方式二:升级父项目的版本
    在新版本的父pom.xm中声明demo-xxx这个jar的版本,并让B模块使用父项目的新版本,然后A模块依赖B项目的新版本。
四、总结
  • 多注意maven报错信息,进而使用-X参数查看debug日志
  • 无法下载间接依赖,一般是直接依赖(B模块)的pom.xml有问题
  • 不要只看本项目中pom.xml的代码,要看该版本对应私服上的代码。

maven无法下载间接依赖包(The POM for com.demo:demo-common:jar:1.1.22 is invalid, transitive dependencies)相关推荐

  1. 解决maven 打包报错:The POM for **jar** is invalid, transitive dependencies (if any) will not be available

    解决maven 打包问题: The POM for org.javassist:javassist:jar:3.19.0-GA is invalid, transitive dependencies ...

  2. maven编译问题之 -The POM for XXX is invalid, transitive dependencies (if any) will not be available

    问题一: 把父工程tao-parent install 到maven本地仓后,接着install tao-common工程,然后报错 报错信息如下: [WARNING] The POM for com ...

  3. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包...

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

  4. gradle不能下载最新依赖包问题

    先前都是采取xx:xxx:[1,0,),,changing:true方式来下载最新依赖包.但是最近发现刚上传的jar包并不能马上下载,查找官方文档发现,gradle会有一个缓存存在,默认时间是24小时 ...

  5. gradle下载的依赖包位置 及 修改

    gradle下载的依赖包位置 2018年08月01日 00:37:06 LuckyJiang-2019 阅读数:3569 Mac系统默认下载到: /Users/(用户名)/.gradle/caches ...

  6. maven本地仓库有依赖包,还会远程下载的问题

    遇见这样的问题,明明本地有需要的依赖包,但是maven还是会从远程仓库拉取,如果远程仓库有需要的包还好,如果没有,或者无网络环境下没法访问远程仓库,那就直接报错,走不下去了. 原因:在本地仓库的每个依 ...

  7. maven打包时加入依赖包及加入本地依赖包

    maven打包的时候默认是不加入依赖的jar包的,所以想打出一个独立的可运行jar包的话直接mvn clean install package是不行的.需要略改动下pom文件,加入如下plugin ? ...

  8. python pip下载本地依赖包,并在离线环境中安装,并解决报错ERROR: Could not find a version that satisfies the requirement报错

    文章目录 步骤1:导出依赖 步骤2:离线下载依赖包 步骤3:进入新环境使用python安装依赖 整体思路如下: 首先根据项目需要导出依赖包,由于本地的python环境中其实安装了很多乱七八糟的包,这些 ...

  9. ubuntu apt 下载所有依赖包

    服务器开发通常不能联网,我们需要利用一个能上网的服务器下载依赖包 apt-get download $(apt-cache depends --recurse --no-recommends --no ...

最新文章

  1. spark2读取oracle工具类,spark读写Oracle、hive的艰辛之路(一)
  2. 单纯形法(三)(概念部分)
  3. xcode_6.1正式版下载xcode_6.1.dmg 下载分享
  4. 【数据结构与算法】之深入解析“扁平化多级双向链表”的求解思路与算法示例
  5. 《Adobe After Effects CS6完全剖析》——动画:最重要的是关系
  6. bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】
  7. Spring 3.1和JPA的持久层
  8. C++中String类的实现
  9. makefile教程链接
  10. Linux的段错误调试方法
  11. 分布式文件存储FastDFS之安装Nginx实现文件访问
  12. android 悬浮窗口透明,基于popupWindow实现悬浮半透明效果
  13. 打印网页中的指定内容
  14. 【大数据开发】SparkSQL——Spark对接Hive、Row类、SparkSQL函数、UDF函数(用户自定义函数)、UDAF函数、性能调优、SparkSQL解决数据倾斜
  15. [P4]源码管理 - perforce(p4)的分支与集成
  16. Raft算法实现 - Sofa-JRaft,选主,数据写入,日志复制
  17. PC手机图形API介绍
  18. 智能家居之温湿度传感器
  19. Pywinauto Guideline
  20. 面渣逆袭:Spring三十五问,四万字+五十图详解,建议收藏。

热门文章

  1. 禁用win7+ 64位驱动签名功能
  2. 利用Python数据分析:数据规整化(五)
  3. android:visibility的VISIABLE,INVISIABLE,GONE的区别
  4. 消息队列如何使用java,想使用消息队列,先考虑下这些问题!,消息队列如何使用...
  5. Android 13 截屏流程
  6. 代码静态检测工具cppcheck简介
  7. 0基础快速入门CSS技术栈(5)—图解详细阐述说透CSS的盒子模型(超级重要)、圆角边框、盒子阴影及相关重要的笔试题——css的核心中的核心(附详细案例源码解析过程)2021.01.07更新
  8. 图片素材管理软件:Inboard for Mac
  9. 浅谈网络支付加密安全流程思路(安全性极高)
  10. Window 环境中部署 Jinkens