zoukankan      html  css  js  c++  java
  • 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-INFlib  中 自动引入第三方的jar啦。


    参考文章:

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

    感谢原作者的分享,让技术人能够更快的解决问题

  • 相关阅读:
    【XFeng安卓开发笔记】Android开发中如何调用打电话功能
    【XFeng安卓开发笔记】edittext中怎样禁止系统自带键盘弹出但光标还在
    【XFeng安卓开发笔记】android 如何在对话框中获取edittext中的数据
    【nRF51822蓝牙开发笔记】点亮LED灯
    基于R7F0C80212ESP的蓝牙婴儿早教机
    read、write和lseek
    open(/dev/ietctl, O_RDWR) 函数
    通过linux命令来控制板上GP_LED灯亮灭
    更新开发板固件
    PHP_EOL
  • 原文地址:https://www.cnblogs.com/jalenFish/p/14099019.html
Copyright © 2011-2022 走看看