maven 多模块项目如何导入其他模块的第三方 jar 包
背景
写了半年的 Vue 前端,今天对整个前后端项目结构进行了一下梳理,在打包项目时,碰到一个 maven 多模块依赖的问题,本文将记录一下这个问题及其解决办法。
问题描述
整个工程是基于 maven 的多模块项目,由一个父模块和 N 个子模块组成。其中有一个 common 模块,被所有子模块依赖,打包模式为 jar 。
它包含了一个 system scope 的第三方 jar 包 ,是跟国密加密算法相关的:
<dependency><groupId>SM4Crypto</groupId><artifactId>SM4Crypto</artifactId><version>1.0.0</version><scope>system</scope><systemPath>${project.basedir}/lib/SM4Crypto.jar</systemPath></dependency>
我需要对子模块 B 进行打包,它是一个 web war 项目,依赖于 common 模块。打包一直失败,提示编译错误,主要是 common 模块中依赖的公共 jar,如 fastjson 、common-lang 等类找不到。
使用 mvn clean install -X
查看打包信息时,错误信息显示依赖的 common 模块有问题:
The POM for xxx-common:jar:4.0.0 is invalid
[ERROR] 'dependencies.dependency.systemPath' for
SM4Crypto:SM4Crypto:jar must specify an absolute path but is
${project.basedir}/lib/SM4Crypto.jar
解决办法
按照模块依赖的打包流程,先对 common 模块执行了 install ,再对模块 B 执行 install 。报错信息说明模块 B 在解决 common 的依赖时,认为其 pom.xml 无效,原因是SM4Crypto.jar 的路径是相对路径。
据我猜测,应该是 common 模块在 install 之后,已经脱离原工程、被安裝到仓库中了,这个相对路径就没办法计算出确切的值,导致编译失败。
解决办法有两种:
- 把 common 模块对 SM4Crypto.jar 的依赖路径改成绝对路径,保证 install 之后,模块 B 解决依赖时能找到它;
<dependency><groupId>SM4Crypto</groupId><artifactId>SM4Crypto</artifactId><version>1.0.0</version><scope>system</scope><systemPath>E:/myproject/ModuleB/lib/SM4Crypto.jar</systemPath></dependency>
- SM4Crypto.jar 作为独立模块安裝到本地仓库,然后 common 模块中正常引用仓库包,不需要用 system 方式引用第三方 jar 包。
<dependency><groupId>SM4Crypto</groupId><artifactId>SM4Crypto</artifactId><version>1.0.0</version></dependency>
启示录
maven 多模块开发有两点值得注意,第一,如果是 war 项目,依赖第三方 jar 可以通过 scope 为 system 的方式处理,但这里是普通的 jar 模块,就会出现本文的问题。如果公司私服中安裝了这个第三方 jar ,就不会有问题啦;否则只能由开发人员自行解决依赖了。
第二,模块的安裝顺序,理论上是先 install root 模块的。但是,如果子模块过多,就会很慢,有一个快捷方法是注释掉子模块后再 install 父模块,空跑很快。
然后只对需要的模块打包就可以了,基本顺序是:
父模块——>依赖模块——> 目标模块
maven 多模块项目如何导入其他模块的第三方 jar 包相关推荐
- Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- 关于如何正确地在android项目中添加第三方jar包
在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception ...
- 手动将jar包导入pom依赖,让jar包适配本地maven项目
前言: Oracle对maven很久没有更新依赖,虽然19年更新了一版,但pom引入一直有错误. 我用的是oralce 12的依赖,虽然有jar包,但是依赖和pom没有适配,项目打包的时候还要去中央仓 ...
- maven导入第三方jar包
这个第三方jar包,是不能在私服或者公共通用的mavan服务器上下载的jar包. 第一步:将第三方jar包放入项目根目录下,即与pom文件同意层级 第二步:maven导入第三方jar包 第三步:选中项 ...
- 在maven项目中解决第三方jar包依赖的问题
在maven项目中解决第三方jar包依赖的问题 参考文章: (1)在maven项目中解决第三方jar包依赖的问题 (2)https://www.cnblogs.com/nuccch/p/6122938 ...
- maven 项目中引入第三方jar包的方法
说明:这里说的第三方jar包是指maven库中没有改jar包,但是你的项目是maven项目,需要引入该jar包 1 将jar包放入项目的libs(我的路径是/Users/ma/workspace/bi ...
- php项目如何导jdbc包,JDBC-idea导入mysql连接java的jar包(mac)的方法
前言 1.本文使用的是mysql8.0版本 与5.0版本相比:导包方式相同,后面代码中的注册驱动方式不同 1.mac与pc的idea菜单和图标不是完全相同,但是步骤是差不多的 下载对应版本的jar包 ...
- Mavn 项目 引入第三方jar包 导致ClassNotFoundException
案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...
- maven引用第三方jar包的解决方法
目录 一.指定路径引用 二.先安装再引用 maven有两种引用第三方jar包的形式:一种是scope为system,直接指定jar路径引用:另一种是先安装到本地仓库再引用. 一.指定路径引用 要想直接 ...
最新文章
- ZXing.Net.Mobile无法识别较大的条码
- 文巾解题 876. 链表的中间结点
- Halcon算子盘点:Chapter 19:轮廓线XLD
- golang fmt格式“占位符”
- html中怎么使用数字轮播,【求助】页面上显示几个数字,打开html的时候希望能滚动起来...
- 线性系统的基本理论与运算
- 数据库的事务,隔离级别和3大范式
- 华强北耳机为啥老是有人翻车?
- leetcood学习笔记-204-计算质数
- mysql的每隔1分钟定时_简单易用,spring boot集成quartz,实现分布式定时任务
- Google Maps API V3: 通过邮编获取经纬度 Get Location (Latitude and Longitude) from Zip Cod
- C/C++中的联合 union
- HttpServletRequest中文乱码
- python 数学公式显示_python 数学公式·
- Panic and Recover
- iOS 性能、架构、socket 小结
- 系统架构设计师如何进行架构设计
- w10计算机运行特别卡,win10会很卡,详细教您怎么解决
- 计算机应用计术,计算机应用技术.ppt
- UT 项目启动报错解决方法
热门文章
- 绘制一个stm32最小系统的电路原理图;完成STM32+SD卡 的系统原理图设计
- 微信7.0.10正式版来了!朋友圈斗图彻底关闭了!
- 数据库一条insert插入多条记录
- golang官网可以打开了 go语言
- Day 6.重大医疗伤害事件网络舆情能量传播过程分析*———以“魏则西事件”为例
- QGraphicsItem释放内存——QGraphicsRectItem
- 【进阶篇】前端学习路线
- 04 turtle库 | 发送小心心
- 电子商务新发展 海峡两岸智富惠论坛今日在厦召开
- 信息学奥赛一本通 1098:质因数分解 | 1957:【12NOIP普及组】质因数分解 | OpenJudge NOI 1.5 43 | 洛谷 P1075 [NOIP2012 普及组] 质因数分解