背景

写了半年的 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 之后,已经脱离原工程、被安裝到仓库中了,这个相对路径就没办法计算出确切的值,导致编译失败。

解决办法有两种

  1. 把 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>
  1. 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 包相关推荐

  1. Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  2. 关于如何正确地在android项目中添加第三方jar包

                  在android项目中添加第三方jar包虽然不是一个很复杂的问题,但是确实给很多开发者带来了不小的困扰.我自己就曾经碰到过calss not found exception ...

  3. 手动将jar包导入pom依赖,让jar包适配本地maven项目

    前言: Oracle对maven很久没有更新依赖,虽然19年更新了一版,但pom引入一直有错误. 我用的是oralce 12的依赖,虽然有jar包,但是依赖和pom没有适配,项目打包的时候还要去中央仓 ...

  4. maven导入第三方jar包

    这个第三方jar包,是不能在私服或者公共通用的mavan服务器上下载的jar包. 第一步:将第三方jar包放入项目根目录下,即与pom文件同意层级 第二步:maven导入第三方jar包 第三步:选中项 ...

  5. 在maven项目中解决第三方jar包依赖的问题

    在maven项目中解决第三方jar包依赖的问题 参考文章: (1)在maven项目中解决第三方jar包依赖的问题 (2)https://www.cnblogs.com/nuccch/p/6122938 ...

  6. maven 项目中引入第三方jar包的方法

    说明:这里说的第三方jar包是指maven库中没有改jar包,但是你的项目是maven项目,需要引入该jar包 1 将jar包放入项目的libs(我的路径是/Users/ma/workspace/bi ...

  7. php项目如何导jdbc包,JDBC-idea导入mysql连接java的jar包(mac)的方法

    前言 1.本文使用的是mysql8.0版本 与5.0版本相比:导包方式相同,后面代码中的注册驱动方式不同 1.mac与pc的idea菜单和图标不是完全相同,但是步骤是差不多的 下载对应版本的jar包 ...

  8. Mavn 项目 引入第三方jar包 导致ClassNotFoundException

    案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...

  9. maven引用第三方jar包的解决方法

    目录 一.指定路径引用 二.先安装再引用 maven有两种引用第三方jar包的形式:一种是scope为system,直接指定jar路径引用:另一种是先安装到本地仓库再引用. 一.指定路径引用 要想直接 ...

最新文章

  1. ZXing.Net.Mobile无法识别较大的条码
  2. 文巾解题 876. 链表的中间结点
  3. Halcon算子盘点:Chapter 19:轮廓线XLD
  4. golang fmt格式“占位符”
  5. html中怎么使用数字轮播,【求助】页面上显示几个数字,打开html的时候希望能滚动起来...
  6. 线性系统的基本理论与运算
  7. 数据库的事务,隔离级别和3大范式
  8. 华强北耳机为啥老是有人翻车?
  9. leetcood学习笔记-204-计算质数
  10. mysql的每隔1分钟定时_简单易用,spring boot集成quartz,实现分布式定时任务
  11. Google Maps API V3: 通过邮编获取经纬度 Get Location (Latitude and Longitude) from Zip Cod
  12. C/C++中的联合 union
  13. HttpServletRequest中文乱码
  14. python 数学公式显示_python 数学公式·
  15. Panic and Recover
  16. iOS 性能、架构、socket 小结
  17. 系统架构设计师如何进行架构设计
  18. w10计算机运行特别卡,win10会很卡,详细教您怎么解决
  19. 计算机应用计术,计算机应用技术.ppt
  20. UT 项目启动报错解决方法

热门文章

  1. 绘制一个stm32最小系统的电路原理图;完成STM32+SD卡 的系统原理图设计
  2. 微信7.0.10正式版来了!朋友圈斗图彻底关闭了!
  3. 数据库一条insert插入多条记录
  4. golang官网可以打开了 go语言
  5. Day 6.重大医疗伤害事件网络舆情能量传播过程分析*———以“魏则西事件”为例
  6. QGraphicsItem释放内存——QGraphicsRectItem
  7. 【进阶篇】前端学习路线
  8. 04 turtle库 | 发送小心心
  9. 电子商务新发展 海峡两岸智富惠论坛今日在厦召开
  10. 信息学奥赛一本通 1098:质因数分解 | 1957:【12NOIP普及组】质因数分解 | OpenJudge NOI 1.5 43 | 洛谷 P1075 [NOIP2012 普及组] 质因数分解