SpringBoot使用Maven打包异常-引入外部jar

导读

由于项目需要,在需要打包的时候,由于引入的外部jar在本地是可以使用的,但是当打包后启动时报错,找不到对应的类。

使用

1、引入外部jar包

项目中建立文件夹lib

可以在项目根目录下建立一个libs文件夹,将jar包扔进去

在配置文件中引用

1
2
3
4
5
6
7
 <dependency>
<groupId>com.xx.xxx</groupId> //组织,随便命名
<artifactId>abc</artifactId> //包的名字,随便命名
<version>1.1.2</version> //版本,随便命名
<scope>system</scope> //scope为system时,自动添加lib依赖包
<systemPath>${basedir}/../libs/**.jar</systemPath> //指定jar包所在路径
</dependency>

加完这一段,使用Maven打包命令生成的jar包,解压后,可以看到BOOT-INF/lib目录中已经包含了abc.jar

2、项目打包

遇到问题

此时只有当前模块的jar中包含了abc.jar,但是主入口模块的jar包中并不存在abc.jar,执行打包后的主入口jar时会报错:NoClassDefFoundError。

解决方案

解决方式很简单,只需要在pom.xml里面配置下 includeSystemScope 就行。

1
2
3
4
5
6
7
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>

使用Maven命令打包后,可以看到主入口的jar包中,BOOT-INF/lib目录已经包含了abc.jar

注意: <plugin>这段代码不是加在当前的Maven子模块,而是加在入口的Maven模块。
比如主入口模块web,引入了子模块common,而common模块中dependency一个本地jar包,那么<plugin>这段代码应该放在web模块的pom.xml文件中。