maven 多模块项目如何导入其他模块的第三方 jar 包

张开发
2026/5/7 16:25:20 15 分钟阅读

分享文章

maven 多模块项目如何导入其他模块的第三方 jar 包
背景写了半年的 Vue 前端今天对整个前后端项目结构进行了一下梳理在打包项目时碰到一个 maven 多模块依赖的问题本文将记录一下这个问题及其解决办法。问题描述整个工程是基于 maven 的多模块项目由一个父模块和 N 个子模块组成。其中有一个 common 模块被所有子模块依赖打包模式为 jar 。它包含了一个 system scope 的第三方 jar 包 是跟国密加密算法相关的dependencygroupIdSM4Crypto/groupIdartifactIdSM4Crypto/artifactIdversion1.0.0/versionscopesystem/scopesystemPath${project.basedir}/lib/SM4Crypto.jar/systemPath/dependencyAI写代码1234567我需要对子模块 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 forSM4Crypto:SM4Crypto:jar must specify an absolute path but is${project.basedir}/lib/SM4Crypto.jarAI写代码1234解决办法按照模块依赖的打包流程先对 common 模块执行了 install 再对模块 B 执行 install 。报错信息说明模块 B 在解决 common 的依赖时认为其 pom.xml 无效原因是SM4Crypto.jar 的路径是相对路径。据我猜测应该是 common 模块在 install 之后已经脱离原工程、被安裝到仓库中了这个相对路径就没办法计算出确切的值导致编译失败。解决办法有两种把 common 模块对 SM4Crypto.jar 的依赖路径改成绝对路径保证 install 之后模块 B 解决依赖时能找到它dependencygroupIdSM4Crypto/groupIdartifactIdSM4Crypto/artifactIdversion1.0.0/versionscopesystem/scopesystemPathE:/myproject/ModuleB/lib/SM4Crypto.jar/systemPath/dependencyAI写代码1234567SM4Crypto.jar 作为独立模块安裝到本地仓库然后 common 模块中正常引用仓库包不需要用 system 方式引用第三方 jar 包。dependencygroupIdSM4Crypto/groupIdartifactIdSM4Crypto/artifactIdversion1.0.0/version/dependencyAI写代码12345启示录maven 多模块开发有两点值得注意第一如果是 war 项目依赖第三方 jar 可以通过 scope 为 system 的方式处理但这里是普通的 jar 模块就会出现本文的问题。如果公司私服中安裝了这个第三方 jar 就不会有问题啦否则只能由开发人员自行解决依赖了。第二模块的安裝顺序理论上是先 install root 模块的。但是如果子模块过多就会很慢有一个快捷方法是注释掉子模块后再 install 父模块空跑很快。然后只对需要的模块打包就可以了基本顺序是父模块——依赖模块—— 目标模块

更多文章