maven項(xiàng)目打jar包并包含所有依賴詳細(xì)教程
背景:
基于最近項(xiàng)目部署,需要打jar包,然后涉及接口調(diào)用,反復(fù)測(cè)試,出現(xiàn)了各種問(wèn)題,最后找到合理方案,特做以下總結(jié):
一、延伸知識(shí):Springboot打jar包命令
1.把之前打過(guò)的包通通干掉
mvn package clean -Dmaven.test.skip=true
2.重新打包
mvn package -Dmaven.test.skip=true
3. Springboot的打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>起初項(xiàng)目框架用的SpringBoot,大家都知道,它里面是有自帶打包依賴,那么問(wèn)題就是,用Springboot自帶的依賴打成jar包,是可以放在java環(huán)境下直接運(yùn)行的,但是如果用于接口調(diào)用就行不通了。SpringBoot會(huì)自帶打包插件打的包不能用。將SpringBoot會(huì)自帶打包插件打的包解壓后會(huì)看到它的目錄結(jié)構(gòu),它把包都打到BOOT-INF這個(gè)目錄下了,引用的時(shí)候我們引用不到,會(huì)報(bào)“Cannot resolve symbol”的錯(cuò)。
注:
JAR包中的/META-INF/MANIFEST.MF元數(shù)據(jù)文件必須包含Main-Class(主類)信息。
項(xiàng)目所有的依賴都必須在Classpath中,其可以通過(guò) MANIFEST.MF 指定或者隱式設(shè)置
二、想要將打的jar包用于接口調(diào)用并且還包含項(xiàng)目所有依賴
不會(huì)給調(diào)用方造成引入依賴或者導(dǎo)入外部jar包的困擾,特有以下方法:
1.在pom.xml中引入插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<!--給jar包起的別名-->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!--添加項(xiàng)目中主類-->
<mainClass>com.sdt.intf.client.tools.DealConnectFile</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>注:
①.添加完插件后,就可以開(kāi)始打包了,可以直接操作maven

②.可以用命令執(zhí)行:
通過(guò)mvn clean compaile package 將生成兩個(gè)jar 一個(gè)是沒(méi)有dependence結(jié)尾的jar,這個(gè)不包含其他依賴jar的jar包,只包含主類的依賴。
另一個(gè)是以dependence結(jié)尾jar,此jar是包含了項(xiàng)目中所有依賴的jar包

總結(jié)
到此這篇關(guān)于maven項(xiàng)目打jar包并包含所有依賴的文章就介紹到這了,更多相關(guān)maven項(xiàng)目打jar包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文詳解如何使用Java來(lái)發(fā)送qq郵箱郵件
這篇文章主要給大家介紹了關(guān)于如何使用Java來(lái)發(fā)送qq郵箱郵件的相關(guān)資料,文中降了準(zhǔn)備工作(開(kāi)啟服務(wù)并生成授權(quán)碼)、接口調(diào)用(引入依賴和編寫(xiě)接口代碼)、發(fā)送HTML格式郵件等內(nèi)容,需要的朋友可以參考下2024-12-12
Springboot處理配置CORS跨域請(qǐng)求時(shí)碰到的坑
本篇文章介紹了我在開(kāi)發(fā)過(guò)程中遇到的一個(gè)問(wèn)題,以及解決該問(wèn)題的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-09-09
服務(wù)器獲取Jar包運(yùn)行目錄實(shí)現(xiàn)方式
本文介紹了兩種獲取Java應(yīng)用程序運(yùn)行目錄的方法:使用`System.getProperty("user.dir")`和通過(guò)`ProtectionDomain`及`CodeSource`類,前者簡(jiǎn)單直接,但返回的是當(dāng)前工作目錄;后者更為復(fù)雜,但能準(zhǔn)確獲取JAR文件的路徑,選擇哪種方法取決于具體需求2025-11-11
mybatis使用foreach標(biāo)簽進(jìn)行嵌套插入
數(shù)據(jù)庫(kù)插入操作常見(jiàn)于多層架構(gòu)設(shè)計(jì)中,本文提供了一個(gè)具體的實(shí)現(xiàn)方案,涉及三層實(shí)體類結(jié)構(gòu),第一層實(shí)體類負(fù)責(zé)基本數(shù)據(jù)結(jié)構(gòu)的定義,第二層和第三層實(shí)體類則提供更詳細(xì)的業(yè)務(wù)邏輯處理,同時(shí),文章還介紹了相應(yīng)的mapper接口和配置文件設(shè)置2024-09-09
Java使用Graphics2D實(shí)現(xiàn)字符串文本自動(dòng)換行
這篇文章主要為大家詳細(xì)介紹了Java如何使用Graphics2D實(shí)現(xiàn)字符串文本自動(dòng)換行,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
SpringBoot集成內(nèi)存數(shù)據(jù)庫(kù)Sqlite的實(shí)踐
sqlite這樣的內(nèi)存數(shù)據(jù)庫(kù),小巧可愛(ài),做小型服務(wù)端演示程序,非常好用,本文主要介紹了SpringBoot集成Sqlite,具有一定的參考價(jià)值,感興趣的可以了解一下2021-09-09
Maven打包編譯出現(xiàn)Fileencodinghasnotbeenset問(wèn)題的解決方案
在使用Maven進(jìn)行項(xiàng)目構(gòu)建時(shí),有時(shí)會(huì)遇到??File encoding has not been set??的錯(cuò)誤提示,這個(gè)問(wèn)題通常出現(xiàn)在Maven嘗試編譯Java源文件時(shí),本文將詳細(xì)介紹該問(wèn)題的原因、解決方法以及如何避免類似問(wèn)題再次發(fā)生,需要的朋友可以參考下2025-11-11
揭秘Spring核心注解@Configuration與@Component的本質(zhì)區(qū)別
在Spring框架中,@Configuration和@Component都是常用的注解,但它們有著本質(zhì)的區(qū)別,本文將深入剖析這兩者的核心區(qū)別,并通過(guò)代碼示例展示它們的實(shí)際行為差異2025-07-07

