2016-10-02 174 views
0

我有一個在生產環境中運行良好的彈簧引導應用程序,但最近我有一些關於脂肪罐部署策略的問題。脂肪罐的總大小約爲80 MB,因爲它全部捆綁爲單個jar,每次我改變一行,這個80 MB的軟件包就會重新部署。我如何將這個胖罐子分割到/ lib目錄下的主jar和其他罐子中(這些jar不是我開發的)。我有什麼選擇?部署彈簧引導脂肪罐

+0

你在用什麼構建工具,Maven,Gradle? – Magnus

+0

我正在使用maven。 – cacert

+0

這是一個問題,因爲?在刪除包裝時,您基本上也會刪除所有依賴關係。現在,在升級某些東西時,您還必須確保將其複製到'/ lib'文件夾中。最終,由於/ lib文件夾中的舊/缺失依賴關係,某人刪除了某些內容,將其複製到某些看起來很方便的東西中,從而導致某些內容會被破壞。通常這會給解決它帶來麻煩。只需爲您的存儲庫設置適當的內務管理(例如僅保存最後的x個版本)。 –

回答

1

你有幾個選擇,最簡單的方法(and suggested by official docs)就是提取fat jar文件。

$ unzip -q myapp.jar 
$ java org.springframework.boot.loader.JarLauncher 

有幾個與這個問題,首先是所有的應用程序代碼現在是一堆類文件(而不是在它自己的jar)。
第二個問題是您仍在使用彈簧引導加載程序,該加載程序不再提供多少實用程序,並且還會污染文件系統。

另一種選擇是改變你的構建,爲你提供你想要的。
隨着gradle你可以使用application plugin,與maven,我會建議appassembler plugin

Appassembler生成目錄target/appassembler/,其中包含帶有啓動腳本的bin目錄以及包含所有依賴關係的repo目錄。

要使用它,你需要禁用spring-boot:repackage任務,並告訴appassembler插件你的主類是什麼。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>appassembler-maven-plugin</artifactId> 
      <version>1.10</version> 
      <configuration> 
       <programs> 
        <program> 
         <mainClass>com.example.MyMainClass</mainClass> 
         <id>myappname</id> 
        </program> 
       </programs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

我會檢查第二個選項,謝謝。 – cacert