在 maven 中配置本地 system scope 依赖需同时声明 groupid、artifactid、version、scope=system 和 systempath(推荐用 ${project.basedir} 开头的相对路径);该依赖不参与仓库查找,编译可用但默认不打包,需插件显式启用 includesystemscope 才能运行时生效。

在 Maven 中配置本地系统依赖(system scope)的 JAR 包,核心是明确声明依赖坐标 + 指定绝对或项目内相对路径。这种方式不走仓库机制,直接绑定文件系统位置,适合临时调试或受限环境,但不能用于 CI/CD 或团队共享构建。
必须包含的四个关键字段
system 依赖不是普通依赖,它要求以下四项同时存在且合法:
- groupId、artifactId、version:必须填写,Maven 会校验格式(如不能全空或含非法字符),但这些值不参与仓库查找;
- scope=system:显式声明作用域,缺一不可;
-
systemPath:指向 JAR 文件的实际路径,且必须是绝对路径,或以
${project.basedir}开头的相对路径(推荐后者,保证跨机器可读)。
正确写法示例(推荐用 ${project.basedir})
假设你的 JAR 放在项目根目录下的 lib/DmJdbcDriver18.jar:
<dependency><groupid>com.dm</groupid><artifactid>DmJdbcDriver</artifactid><version>1.8.0</version><scope>system</scope><systempath>${project.basedir}/lib/DmJdbcDriver18.jar</systempath></dependency>
注意:${project.basedir} 自动解析为 pom.xml 所在目录,比硬编码 C:/xxx 或 /home/user/xxx 安全得多。
编译与运行能用,但打包默认不包含
默认情况下,system 依赖不会被打进最终的 JAR/WAR 包中,因为 Maven 认为它是“外部系统资源”。如果需要打包进去(比如生成可执行 fat jar),必须额外配置插件:
- 对
maven-jar-plugin或maven-assembly-plugin,需启用<includesystemscope>true</includesystemscope>; - Spring Boot 项目用
spring-boot-maven-plugin时,同样加该配置项; - 否则运行时会报
NoClassDefFoundError—— 编译通过了,但运行时找不到类。
常见错误和避坑点
以下情况会导致构建失败或运行异常:
-
systemPath路径不存在,或拼写错误(大小写、斜杠方向、中文路径); - 路径没用
${project.basedir},而是写了绝对路径(换电脑就失效); - 漏写
<scope>system</scope>,Maven 会当成普通依赖去远程仓库找,必然失败; - 在 CI 环境(如 Jenkins、GitLab CI)中使用,因无对应文件路径而构建中断。











