這里提供兩種解決方案
- 清理 Maven 依賴中無用依賴( Unused declared dependencies )。
- 打包時排除所有 jar 依賴改為運行時外部引用。
方案一:清理Maven依賴中無用依賴
可以使用 mvn dependency:analyze 命令對項目進行分析,并以此作為參考來剔除無用依賴。
下面對圖中的 Used undeclared dependencies found 和 Unused declared dependencies found 作出解釋
Used undeclared dependencies found
意為項目中有些我們使用到的 jar 包依賴并沒有在 pom 文件中顯示聲明,這意味著這些包是通過引用傳遞 1 而來的。
這個時候我們可以選擇顯示聲明他們。
Unused declared dependencies found
意為項目中存在顯示聲明的依賴我們在實際的應用中并沒有使用到。我們可以將他們從 pom 文件中剔除。
注意:
這里雖然說實際代碼中沒有用到,但并不意味著一定沒有用到,這里只是說 main/java 和 test 中沒有使用到,具體剔除方案還需要自己衡量,這個結果只能作為參照。
方案二:外部引用 jar 包(立竿見影)
可有效縮減 jar 包大小,進而解決 Jar 包太大引發的打包慢,上傳慢等問題。
1. 將原本 jar 包解壓縮找到 BOOT-INF 下的 lib 目錄考出,該目錄下包含所需所有 jar包。
2. 在 pom 中 spring-boot-maven-plugin 打包插件設置打包時排除所有 jar 包
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <layout>ZIP</layout> <includes> <include> <!-- 排除所有Jar --> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> </plugin>
此時打包,會發現 jar 包大小銳減,將 jar 包與 lib 放在同一目錄下執行命令
java -Dloader.path="lib/" -jar yourjarname.jar 即可。
引用傳遞意為:我們通過 pom 文件聲明了依賴的 jar 包 A 同時包 A 引用了 jar 包 B 即 A.jar -> B.jar 此時我們可以直接使用 B包中的代碼但我們卻沒有顯示聲明引用 B包
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。