专栏首页灵儿的笔记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啦。

参考文章:

https://www.jianshu.com/p/cf8bcb688623

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分享一个页面访问计数的js代码给大家

    <script type="text/javascript"> var caution=false function setCookie(name,value,...

    小小鱼儿小小林
  • pl sql 查看历史执行过的sql记录

    现在越来越多人用plsql 查询和执行sql,因为该工具很方便,不仅可以执行sql、以及命令窗口,但是呢,有时候我们执行完sql,可能忘记保存或者当时觉得可能不...

    小小鱼儿小小林
  • Extjs中给一个组件命名时,id,name,hiddenName这三者的用法和区别是什么

    Extjs中给一个组件命名时,id,name,hiddenName这三者的用法和区别是什么 id,name与HTML中元素的id、name相对应 hidde...

    小小鱼儿小小林
  • 记录解决一个项目中遇到的maven打包问题

    拿到同时给的代码,进行打jar包,这个jar包依赖一个第三方的jar包,一开始用IDEA打出来的包,没有把依赖的包打进去,后来查了相关的资料,

    小勇DW3
  • Python 3基础教程24-读取csv

           本文来介绍用Python读取csv文件。什么是csv(Comma-Separated Values),也叫逗号分割值,如果你安装了excel,默认...

    py3study
  • 测试工程师职业发展漫谈

    中国最早的对 IT 工程的启蒙和测试定位的探索大多来自于微软。当年的大背景是微软故意放任 Windows 的盗版,并积极的输出他自身的 IT 生态技术栈到中国。...

    IT大咖说
  • 性能优化 = 改改代码?

    上了一定规模的系统,特别是To C的系统,性能优化或多或少都会被逼着去做一下。否则,系统便无法支撑业务的发展,技术成了拖后腿,不是引领业务了。

    Zachary_ZF
  • 【开源】采集1024的图片到WordPress,图床只支持chevereto

    用户1202364
  • Caffe2 - (二十一) Detectron 之模型训练及数据加载流程

    根据训练过程 train_net.py,大致梳理下 Detectron 的训练过程和训练时数据加载过程.

    AIHGF
  • SolrCloud6.1.0之SQL查询测试

    我是攻城师

扫码关注云+社区

领取腾讯云代金券