springBoot导入本地jar并且要求通过maven打包到项目的jar中|Unable to open nested jar file 'BOOT-INF/lib/xxxxxx.jar'

简介: springBoot导入本地jar并且要求通过maven打包到项目的jar中|Unable to open nested jar file 'BOOT-INF/lib/xxxxxx.jar'

今天做项目的时候,需要用到第三方写的jar包,我们知道,maven项目是在pom.xml文件中,引入jar包的maven地址,这样是可以直接import的,eg

 <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
</dependency>

但是如果这时候需要用到第三方的jar包而不是maven配置的时候,该怎么操作呢。

 

首先呢,我们肯定是常人思维,通过maven的package打完包之后,直接拖进来不就可以了吗?


但是这样呢,打完包之后,启动的时候 是会报一个异常的:如图所示

java.io.IOException: Unable to open nested jar file 'BOOT-INF/lib/xxxxxxxxxxx.jar'

这个是因为你直接拖进去的时候,和package打包的时候,两者的压缩算法是不一样的,这个我就先不截图了。


解决方法:


我们可以在项目的src/main/resource文件夹下,新建一个 lib目录,然后把第三方的jar直接放进来,这样你本地代码IDE中调用第三方jar包靓丽的方法的时候,应该是不会报错了。但是打包的时候还是会报错的,这时候呢,要在pom.xml文件里引入这些第三方jar包


如图所示


 

然后在pom.xml中,按照下面的方式<systemPath>引入

<dependency>
            <groupId>apollo</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/slf4j-api-1.7.25.jar</systemPath>
        </dependency>
<dependency>
            <groupId>apollo</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/commons-io-2.5.jar</systemPath>
        </dependency>

有多个jar就得引入多少个,不要嫌麻烦,其中<groupId>和<artifactId>可以随便填,不过最好要有统一的格式,groupid最好填统一的,artifacId可以填jar名称这样。


最后一步也是最重要的,不要忘记在这里引入一下<scope>,因为你不引用的话,maven的package是不是打入到jar包里的


 

在pom.xml最后,加上如图所示的<includeSystemScope>这个,

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
        </plugins>
    </build>

这样,你再通过package就可以在打好包的jar中的BOOT-INF\lib  中 自动引入第三方的jar啦。

 

 

相关文章
|
10天前
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
如何在SpringBoot项目中使用过滤器和拦截器
|
4天前
|
Java 关系型数据库 MySQL
创建一个SpringBoot项目,实现简单的CRUD功能和分页查询
【9月更文挑战第6天】该内容介绍如何使用 Spring Boot 实现具备 CRUD 功能及分页查询的项目。首先通过 Spring Initializr 创建项目并选择所需依赖;其次配置数据库连接,并创建实体类与数据访问层;接着构建服务层处理业务逻辑;最后创建控制器处理 HTTP 请求。分页查询可通过添加 URL 参数实现。
|
2天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
8天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
6天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
4天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
8天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
10天前
|
Java Apache Maven
Maven 项目文档
Maven 项目文档
|
Java Linux Shell
Springboot项目Jar注册到Centos服务
Springboot项目Jar注册到Centos服务
227 0
|
24天前
|
SQL 前端开发 NoSQL
SpringBoot+Vue 实现图片验证码功能需求
这篇文章介绍了如何在SpringBoot+Vue项目中实现图片验证码功能,包括后端生成与校验验证码的方法以及前端展示验证码的实现步骤。
SpringBoot+Vue 实现图片验证码功能需求

热门文章

最新文章