在做项目的时候,有时需要引入第三方Jar包来完成指定的功能。但是会出现,引入jar包后,在编辑器上可以正常访问,但是打包成war后就会报class not found的异常。

本篇所有操作都基于idea

一、引入jar包

1、在resources文件夹中创建一个lib文件夹,并复制Jar包。

spring boot加载jar包 springboot项目引入本地jar包_spring boot


2、点击File->Project Structure->Libraries

spring boot加载jar包 springboot项目引入本地jar包_jar_02


然后选择所在的lib文件夹,点击OK。

spring boot加载jar包 springboot项目引入本地jar包_spring boot_03

二、配置pom

1、引入jar包

<dependency>
    <groupId>com.pdd</groupId>
    <artifactId>pdd-sdk-1</artifactId>
    <version>1.11.68</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/src/main/resources/lib/pop-sdk-1.11.68-all-sources.jar</systemPath>
</dependency>

${pom.basedir}为maven的路径,也可用${project.basedir},但是我用这个的时候地址还是会错误。

groupId、artifactId、version 这三个可以随便写,想写啥都可以。重要的是scope、systemPath这两个要确保不出错。

scope就是system,systemPath为jar包所在路径。

到此,在idea中就可以正常的使用Jar包了,但是打包成war就会报class not found的异常这是因为打包后,没有把jar包一起打包。

2、配置打包War(重点!)

1️⃣SpringBoot想要打包成war包部署的话,需要把SpringBoot自带的tomcat给干掉。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

网上查资料时,发现有很多人说还需要加上以下代码,但是我加上后反而不好使,所以我没有加。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>

2️⃣修改自启动类,重写初始化代码

用过springboot都知道每个项目都有一个Application的启动类

spring boot加载jar包 springboot项目引入本地jar包_spring boot加载jar包_04


我们需要把类似于web.xml的配置方式在application中启动spring的上下文,在启动类中继承SpringBootServletInitializer重写configure方法即可,其代码如下:

@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(AllianceApplication.class);
    }

3、打包war后一起打包jar(超重点!!)

把pom默认的Jar打包插件改为War打包插件,如果没有引入外部Jar则不需要修改,使用原来的插件即可

spring boot加载jar包 springboot项目引入本地jar包_spring boot加载jar包_05

<!--打包war插件-->
<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <webResources>
            <resource>
                <directory>src/main/resources/lib</directory>
                <targetPath>WEB-INF/lib</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
        </webResources>
    </configuration>
 </plugin>

三、打包war

可用idea的自带Maven工具直接打包,也可以使用命令打包。我是直接用工具的。

spring boot加载jar包 springboot项目引入本地jar包_spring_06


可以先clean然后再package,直接双击即可。这样就会在target打包成war,直接部署就好了。

以上。