You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot添加scope=system外部JAR后,Jar包运行报错问题

解决Spring Boot中system scope外部依赖导致jar运行失败的问题

我之前也踩过一模一样的坑!问题的核心其实很好理解:Maven的system scope依赖默认不会被打包到最终的可执行jar里。Eclipse里能正常运行,是因为IDE已经帮你把这个外部依赖加到了项目的类路径中;但用java -jar springBoot.jar启动时,JVM找不到这个缺失的依赖jar,才会抛出那些和DataSource、JdbcTemplate相关的依赖异常。

下面给你几个实用的解决方案,按推荐程度排序:

方案一:把外部jar安装到本地Maven仓库(最稳妥)

把外部依赖纳入Maven的管理体系,彻底摆脱system scope的限制:

  • 打开终端,执行以下命令(替换成你的jar路径、自定义的groupId、artifactId和版本号):
mvn install:install-file -Dfile=/path/to/your/external.jar -DgroupId=com.your.custom.group -DartifactId=your-artifact-name -Dversion=1.0.0 -Dpackaging=jar
  • 然后修改项目pom.xml里的依赖配置,去掉system scope和systemPath,改成普通的compile scope:
<dependency>
    <groupId>com.your.custom.group</groupId>
    <artifactId>your-artifact-name</artifactId>
    <version>1.0.0</version>
</dependency>

重新执行mvn package打包后,这个依赖会被正常包含到jar里,再用java -jar启动就没问题了。

方案二:配置Spring Boot Maven插件,强制包含system scope依赖

如果不想把jar安装到本地仓库,可以直接修改Spring Boot插件配置,让它把system依赖打包进可执行jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 开启system scope依赖的打包支持 -->
                <includeSystemScope>true</includeSystemScope>
            </configuration>
        </plugin>
    </plugins>
</build>

重新打包后,system依赖会被放到jar的BOOT-INF/lib目录下,运行时JVM就能自动识别到。

方案三:将外部jar单独放在lib目录并配置类路径

适合需要把外部jar和可执行jar分开存放的场景:

  1. 先配置Maven依赖插件,把system依赖复制到打包后的lib目录:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-system-deps</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <includeScope>system</includeScope>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 再修改Spring Boot插件,配置MANIFEST.MF的类路径指向lib目录:
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
        </manifest>
    </configuration>
</plugin>

打包完成后,把生成的springBoot.jar和lib目录放在同一层级,再执行java -jar springBoot.jar就能正常启动了。

内容的提问来源于stack exchange,提问作者Ashutosh Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:48:06