Spring Boot项目IDE运行正常,java -jar启动报BeanCreationException及NoClassDefFoundError
问题根因
你使用system作用域引入本地外部jar包,Spring Boot Maven打包插件默认不会将该作用域的依赖打入最终可执行jar的BOOT-INF/lib目录。IDE运行时可读取本地路径的jar因此运行正常,直接执行jar包时无法加载对应类,就会抛出你遇到的报错。
解决方案
方案1(最小改动快速生效)
修改spring-boot-maven-plugin配置,开启包含system作用域依赖的开关,修改后的插件配置如下:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <mainClass>com.project.fingerprintId.FingerprintIdApplication</mainClass> <!-- 新增以下配置 --> <includeSystemScope>true</includeSystemScope> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
修改后重新执行mvn clean package打包,再运行生成的jar包即可。
方案2(长期使用推荐规范方案)
将本地ImageSDK.jar安装到本地Maven仓库,之后可完全移除依赖中的scope和systemPath配置,按普通依赖引用即可。
安装命令参考(替换为你本地jar的实际路径):
mvn install:install-file -Dfile=/path/to/your/ImageSDK.jar -DgroupId=ImageSDK -DartifactId=ImageSDK -Dversion=1.0 -Dpackaging=jar
安装完成后修改原有依赖配置:
<dependency> <groupId>ImageSDK</groupId> <artifactId>ImageSDK</artifactId> <version>1.0</version> </dependency>
该方案规避了system作用域的各类隐性问题,多人协作场景下通用性更强。
内容的提问来源于stack exchange,提问作者Hristo.L
相关产品推荐
相关产品推荐

