利用maven引入第三方jar包以及打包
我們知道,Maven 是通過倉庫對依賴進行管理的,當 Maven 項目需要某個依賴時,只要其 POM 中聲明了依賴的坐標信息,Maven 就會自動從倉庫中去下載該構件使用。但在實際的開發(fā)過程中,經常會遇到一種情況:對接第三方廠商,人家給了一個jar包,然后項目需要使用這個jar包,但是這個jar包并沒有上傳到遠程倉庫,這時候就不能使用簡單的pom依賴引用了,因此存在兩個問題:
- 如何將jar引用到項目,并且能夠讓項目正常調用該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 表示依賴的本地構件的位置。
打包插件:<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解壓觀察源代碼當中已經沒有l(wèi)ib目錄了。
java -jar 依然是可以運行起來的
以上就是利用maven引入第三方jar包以及打包的詳細內容,更多關于maven引入第三方jar包的資料請關注腳本之家其它相關文章!
相關文章
Eclipse設置svn忽略文件或文件夾(svn:ignore)的操作
這篇文章主要介紹了Eclipse設置svn忽略文件或文件夾(svn:ignore)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01mybatis 自定義實現(xiàn)攔截器插件Interceptor示例
這篇文章主要介紹了mybatis 自定義實現(xiàn)攔截器插件Interceptor,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10Java程序流程控制:判斷結構、選擇結構、循環(huán)結構原理與用法實例分析
這篇文章主要介紹了Java程序流程控制:判斷結構、選擇結構、循環(huán)結構原理與用法,結合實例形式分析了Java流程控制中判斷結構、選擇結構、循環(huán)結構相關原理、用法及操作注意事項,需要的朋友可以參考下2020-04-04MyBatis-Plus中使用EntityWrappe進行列表數(shù)據(jù)倒序設置方式
這篇文章主要介紹了MyBatis-Plus中使用EntityWrappe進行列表數(shù)據(jù)倒序設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03