利用maven引入第三方jar包以及打包
我們知道,Maven 是通過倉庫對依賴進行管理的,當 Maven 項目需要某個依賴時,只要其 POM 中聲明了依賴的坐標信息,Maven 就會自動從倉庫中去下載該構(gòu)件使用。但在實際的開發(fā)過程中,經(jīng)常會遇到一種情況:對接第三方廠商,人家給了一個jar包,然后項目需要使用這個jar包,但是這個jar包并沒有上傳到遠程倉庫,這時候就不能使用簡單的pom依賴引用了,因此存在兩個問題:
- 如何將jar引用到項目,并且能夠讓項目正常調(diào)用該jar包的方法
- 外部引用的jar如何打包進項目?
當然公司如果是有私服的,可以直接將jar包上傳到私服。然后直接通過pom依賴簡單的聲明即可。
因此本篇文章重點針對于這兩點進行講解
目錄
如下是個maven項目,java-demo.jar是我們要引入的jar包。

<!--外部依賴-->
<dependency>
<groupId>com.gzl.cn</groupId>
<artifactId>java-demo</artifactId>
<!--依賴范圍-->
<scope>system</scope>
<version>1.0-SNAPSHOT</version>
<!--依賴所在位置-->
<systemPath>${project.basedir}/src/main/resources/lib/java-demo.jar</systemPath>
</dependency>
在以上配置中,除了依賴的坐標信息外,外部依賴還使用了 scope 和 systemPath 兩個元素。
scope 表示依賴范圍,這里取值必須是 system,即系統(tǒng)。systemPath 表示依賴的本地構(gòu)件的位置。
打包插件:<includeSystemScope>true</includeSystemScope> 這個非常重要,是將外部依賴打包進來的,如果沒有該配置,打出來的jar包是不包含外部jar包的,從而可能會導致運行異常!
<build>
<!-- 打出來的jar包名 -->
<finalName>maven-demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<!-- 主啟動類全類名 -->
<mainClass>com.gzl.cn.App</mainClass>
<!-- 這個配置很重要,是將外部依賴打包進來的,如果沒有該配置,打出來的jar包是不包含外部jar包的 -->
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<!--自定義 id -->
<id>repackage</id>
<!--插件目標 -->
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
但是現(xiàn)在存在一個問題,打出來的jar包可以用,但是特別大。

如下是jar包解壓后的目錄:

我們可以將jar解壓會發(fā)現(xiàn)BOOT-INF的lib目錄下是有一個第三方引用的jar。

然后在BOOT-INF的classes/lib目錄下也有個這個jar包,這個是源碼當中的jar包,上面的是打出來的jar包運行的時候所要依賴的jar包。正常來說我們就可以將源碼當中的jar包給去掉,這樣就可以減小jar包的大小。

添加如下依賴,排除jar的打包
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/lib/**</exclude> </excludes> </resource> </resources> ...以下省略 </build>
重新進行打包后會然后將jar解壓觀察源代碼當中已經(jīng)沒有l(wèi)ib目錄了。


java -jar 依然是可以運行起來的

以上就是利用maven引入第三方jar包以及打包的詳細內(nèi)容,更多關于maven引入第三方jar包的資料請關注腳本之家其它相關文章!
相關文章
實現(xiàn)了基于TCP的Java Socket編程實例代碼
這篇文章主要介紹了基于TCP的Java Socket編程實例代碼,有需要的朋友可以參考一下2013-12-12
Java?深入學習static關鍵字和靜態(tài)屬性及方法
這篇文章主要介紹了Java?深入學習static關鍵字和靜態(tài)屬性及方法,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
深入分析Spring BeanDefinition的構(gòu)造元信息
Bean Definition是一個包含Bean元數(shù)據(jù)的對象,它描述了如何創(chuàng)建Bean實例、Bean屬性的值以及Bean之間的依賴關系,本文將帶大家深入分析Spring BeanDefinition的構(gòu)造元信息,需要的朋友可以參考下2024-01-01
基于Java實現(xiàn)進制轉(zhuǎn)換工具類的示例代碼
這篇文章主要為大家詳細介紹了如何基于Java實現(xiàn)進制轉(zhuǎn)換工具類,從而實現(xiàn)減少參數(shù)長度的效果,文中的示例代碼講解詳細,需要的可以參考一下2023-02-02

