夏天到了,來給jar包瘦個身!
工作中終於遇到比較好玩的東西了,最近被給了一個需求,將pom中的第三方依賴移到外面而不直接打包進jar包。直接打包有什麼問題嗎
直接打包的缺點
列一下直接打包的三宗罪!!!
- 如果專案依賴的第三方包非常多,那麼最終提供出去的jar包將非常大,上傳將非常費時
- 如果依賴的某個第三方包有安全漏洞,那麼必須換版本,換版本的話就必須重新進行打包。曾經就暴露出fastjson的安全漏洞,版本小於1.2.68存在反序列化的漏洞
- 如果依賴的第三方包版本升級了,想直接用最新的版本就只能修改版本然後重新打包了
第二點和第三點差不多,都是由版本導致重新打包
但是我們打包時不將依賴的第三方包打包進去,那麼最後的jar包不僅小,而且當依賴的第三方版本發生變化時不需要重新打包了
既然排除第三方包可以帶來這麼多好處,心動不如行動,趕緊對自己的專案大刀闊斧改造一下吧
pom檔案的修改
在maven專案中配置打包相關的東西是在pom檔案中的,如果不需要將第三方包排除在外,通常在pom中都是這樣配置的
authsdk-service-${version} org.springframework.boot spring-boot-maven-plugin authsdk-service-${version} repackage org.apache.maven.plugins maven-compiler-plugin ${project.build.sourceEncoding}
複製程式碼
打包後看一下打包後jar包的大小
大小為27515KB,檢視一下jar包的內容,會發現在BOOT-INF/lib目錄下都是依賴的第三方包
很明顯,這些依賴的第三方包是導致打包出來的jar包大的原因
現在要對pom檔案做一個改動,使其不將第三方依賴打包進去,修改後的配置
authsdk-service-${version} org.springframework.boot spring-boot-maven-plugin <!-- 此處為專案的主類路徑 -->com.xxx.authsdk.AuthsdkServiceApplication ZIP <!-- 排除所有的第三方依賴的Jar包 -->nothing nothing repackage org.apache.maven.plugins maven-compiler-plugin
複製程式碼
修改完後重新打包
jar包大小變為1702KB,是原來的50分之3,瘦身效果很明顯!!!
同時檢視jar包內容/BOOT-INF下沒有lib資料夾了,確實沒有將第三方依賴打包進去了
你以為到這裡就完了嗎,不,還可以做的更好!因為打包時沒有將第三方依賴打包進去,因此啟動的時候需要指定第三方依賴的位置程式才能正常啟動,這就必須要求我們必須保從最開始未瘦身的jar包中將lib資料夾給摳出來,這樣的做法就稍微有點low了。maven提供了一種顯示指定lib資料夾儲存路徑的方法,在之前的pom檔案基礎上加下如下配置
org.apache.maven.plugins maven-dependency-plugin copy-dependencies <!-- 複製第三方 jar 到指定路徑下 下 -->G:/java工程/authorize_service/lib provided <!-- 配置的作用:跳過複製第三方依賴這一步。這是在首次上傳
第三方依賴到伺服器之後,啟用這個選項,可以不用在打包時
重複複製,節省時間。-->false
複製程式碼
透過
指定lib目錄儲存路徑為當前專案路徑下
專案啟動
因為沒有將第三方依賴打包進去,因此啟動時必須顯示指定第三方依賴路勁
- 相對路徑:java -Dloader.path=lib -jar xxx.jar
- 絕對路徑:java -Dloader.path=/xxx/lib -jar xxx.jar
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4830/viewspace-2797597/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 夏天到了用TypeScript給自己開個小空調吧TypeScript
- Hibernate各個jar包作用JAR
- jar包JAR
- idea工具手動匯入jar包,多個module共使用同一個jar包的操作步驟IdeaJAR
- java-jar啟動jar包JavaJAR
- java修改jar包JavaJAR
- idea打包jar包IdeaJAR
- centos 部署jar包CentOSJAR
- linux 部署jar包LinuxJAR
- 深入Jar包:Gradle構建可執行jar包與訪問jar包中資料夾與檔案JARGradle
- 讀取 jar 包中巢狀的 jar 包內容的方法JAR巢狀
- AI表情包生成器來了!給AI餵了96萬個表情包文案AI
- Maven把專案依賴的所有jar包都打到同一個jar中MavenJAR
- IDEA 匯入 ***.jar包IdeaJAR
- Java Jar 包加密 -- XJarJavaJAR加密
- IDEA匯入jar包IdeaJAR
- java中常用jar包JavaJAR
- Maven引入本地jar包MavenJAR
- jar包啟動方式JAR
- linux 啟動jar包:在 Linux 上啟動 Java jar 包的方法LinuxJARJava
- Linux系統下執行Jar包以及idea遠端除錯jar包LinuxJARIdea除錯
- Maven專案打jar包MavenJAR
- maven 工程匯入jar包MavenJAR
- 修改jar包內的classJAR
- jar架包啟動命令JAR
- java開發常用jar包JavaJAR
- jar包部署,jenkins整合javaJARJenkinsJava
- Springboot 引入本地 jar 包方式Spring BootJAR
- Android Studio打包apk,aar,jar包AndroidAPKJAR
- Mysql java JDBC驅動jar包MySqlJavaJDBCJAR
- 檢視JAR包的JDK版本JARJDK
- IntelliJ IDEA 如何引入本地 jar 包IntelliJIdeaJAR
- Assemby 打包並啟動jar包JAR
- java打jar包的maven方式JavaJARMaven
- 《《《maven倉庫下載jar包MavenJAR
- 匯入jar包,main函式JARAI函式
- 實用的jar包加密方案JAR加密
- Linux jar包 後臺執行LinuxJAR