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

感謝原作者的分享,讓技術人能夠更快的解決問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章