夏天到了,來給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
- 更改jar包中的一個classJAR
- httpmine jar包HTTPJAR
- java-jar啟動jar包JavaJAR
- struts2各個jar包的作用JAR
- idea工具手動匯入jar包,多個module共使用同一個jar包的操作步驟IdeaJAR
- java修改jar包JavaJAR
- centos 部署jar包CentOSJAR
- ssh所需jar包JAR
- AI表情包生成器來了!給AI餵了96萬個表情包文案AI
- 通過Gradle來下載依賴的jar包GradleJAR
- jar命令打包與java執行jar包JARJava
- 深入Jar包:Gradle構建可執行jar包與訪問jar包中資料夾與檔案JARGradle
- 讀取 jar 包中巢狀的 jar 包內容的方法JAR巢狀
- Maven把專案依賴的所有jar包都打到同一個jar中MavenJAR
- Java Jar 包加密 -- XJarJavaJAR加密
- java中常用jar包JavaJAR
- jar包啟動方式JAR
- idea打包jar包IdeaJAR
- Struts jar包詳解JAR
- java之生成jar包JavaJAR
- linux 部署jar包LinuxJAR
- Maven引入本地jar包MavenJAR
- maven - 引用本地jar,進行jar包移動MavenJAR
- sql server jdbc 3jar包驅動 msbase.jar;mssqlserver.jar;msutil.jarSQLServerJDBCJAR
- IDEA 匯入 ***.jar包IdeaJAR
- Maven專案打jar包MavenJAR
- IDEA匯入jar包IdeaJAR
- java開發常用jar包JavaJAR
- 修改jar包內的classJAR
- SSM框架各類jar包SSM框架JAR
- win7 生成jar包Win7JAR
- maven 工程匯入jar包MavenJAR
- eclipse匯出jar包EclipseJAR
- Springmvc jar包介紹SpringMVCJAR
- Java 熱載入jar包JavaJAR