若是項目依賴太多,網絡帶寬過小,發包要本地構建上傳等等,這些問題很是影響發版效率(是的,某司網絡帶寬過小,上傳一個300M的包要20分鐘,誰受得了)。Java項目雖然依賴會不少,可是當版本迭代穩定以後,依賴基本就不會再變更了,若是能夠把這些不變的依賴提早都放到服務器上,打包的時候忽略這些依賴,那麼打出來的Jar包就會小不少,直接提高發版效率。java
springboot-slimming是一個pom工程,server是一個SpringBoot工程,server依賴core,模擬實際生產項目。git
core項目中添加common-lang3的依賴github
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
複製代碼
新建一個測試工具類spring
public class TestUtils {
public static String getUUID() {
return RandomStringUtils.random(100);
}
}
複製代碼
server中新建一個TestControllerapache
@RestController
public class TestController {
@GetMapping(value = "/test")
public Object test() {
return TestUtils.getUUID();
}
}
複製代碼
模擬項目已經完畢,看看打包出來的jar包大小。api
有16.8M大。springboot
項目裏的依賴佔了絕大部分空間。服務器
下面開始給項目減肥:markdown
修改pom文件,在spring-boot-maven-plugin 下添加配置:網絡
①指定包含的依賴,不指定的不包含。
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<artifactId>load_lib_test</artifactId>
<groupId>test</groupId>
</include>
</includes>
</configuration>
複製代碼
②指定不包含的依賴,多個groupId用 , 隔開
<configuration>
<layout>ZIP</layout>
<excludeGroupIds>
com.google.api-ads,
com.google.api-client,
org.apache.commons
</excludeGroupIds>
</configuration>
複製代碼
咱們用方式一,把依賴本身其餘項目的工程添加進來,第三方的依賴所有不要打進jar包。
最終配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<artifactId>core</artifactId>
<groupId>cn.happyjava</groupId>
</include>
</includes>
<!-- <excludeGroupIds>-->
<!-- com.google.api-ads,-->
<!-- com.google.api-client,-->
<!-- org.apache.commons-->
<!-- </excludeGroupIds>-->
</configuration>
</plugin>
</plugins>
</build>
複製代碼
從新打包
此次只有149KB大小了。
查看jar,只剩本身寫的core依賴和一個SpringBoot的依賴了
可是這個jar包是不能直接Java -jar運行的。
直接運行會提示ClassNotFoundException。
到server目錄地址,執行以下命令
mvn dependency:copy-dependencies -DoutputDirectory=e:/lib
複製代碼
會把項目中的依賴所有導出來(除了咱們忽略的)
導出來jar包能夠放到服務器上,之後發版就能夠大大節省時間了。運行時須要添加 -Dloader.path="e:\lib" 來加載jar包。
java -jar -Dloader.path="e:\lib" server-0.0.1-SNAPSHOT.jar
複製代碼
啓動項目
項目能夠正常啓動;訪問接口也正常。
這是關於SpringBoot打包瘦身的介紹,若是由於包太大而影響發版效率,這是一個不錯的解決辦法。