將springboot web應用打包為jar
通常情況下,對於一個 web應用,例如我們之前使用到的 hello應用,在部署的時候,我們會將其打包成一個 war包,然後部署到tomcat下面。
在使用了 SpringBoot之後,我們可以將應用打包為一個可以執行的 jar包,同樣可以執行這個應用,因為 tomcat已經內嵌在我們的程式中了,因此我們並不需要將 hello應用打成war 包,然後再部署。
通常我們將一個可以執行的 jar包稱之為fat jar
。因為這樣的 jar包內部通常包含了自己執行時的所有依賴,也就是一個大的 jar中內部包含了自己執行時所有依賴的 jar(jar包中還有jar 包),體積比較大,所以比較 fat。
要注意的是, Java並沒有提供一種標準的方式來載入“巢狀 jar”。而SpringBoot 提供了一個外掛,可以幫助我們將應用打包成一個可以執行的 jar。
在pom.xml檔案中加入:
- <build>
- <!--將應用打包成一個可以執行的 jar -->
- <plugins>
- <plugin>
- <groupId> org.springframework.boot </groupId>
- <artifactId> spring-boot-maven-plugin </artifactId>
- </plugin>
- </plugins>
- </build>
這段配置可以幫助我們將SpringBoot應用打包成一個可執行的jar。下面開始執行打包的操作,右擊專案名 "run as =>maven build" ,在goals 中輸入package:
點選 run之後,我們可以target目錄下看到類似以下的檔案
其中, springbootstudy-0.0.1-SNAPSHOT.jar是我們打包好的,內部包含了其他依賴的,可以直接執行的jar,而springbootstudy-0.0.1-SNAPSHOT.jar.original 則是原始的打包後的jar。
進入 target資料夾所在目錄,我們可以看看這兩個檔案的區別:
第一個可以直接執行的 jar的大小為13M 左右,而第二個只有 6KB。
通過jar tvf springbootstudy-0.0.1-SNAPSHOT.jar
命令,我們可以看到這個 jar中的內容,當然更直觀的方式,你可以選擇直接右擊解壓這個 jar檔案,就會發現這個 jar的 lib目錄下,實際上存放了所有依賴的 jar。而 springbootstudy-0.0.1-SNAPSHOT.jar.original 則是沒有包含這些依賴的 jar的原始包。
我們可以通過命令 java -jar springbootstudy-0.0.1-SNAPSHOT.jar來直接執行這個jar,你將會在命令列看到和在Eclipse中直接執行quick start應用同樣的輸出內容,在瀏覽器中輸入 localhost:8080,可以看到同樣的效果。
注意:,如果你的專案不是沒有設定 parent專案為 spring-boot-starter-parent
,那麼spring-boot-maven-plugin
的配置就要顯示的指定執行階段,如下所示
- <plugin>
- <groupId> org.springframework.boot </groupId>
- <artifactId> spring-boot-maven-plugin </artifactId>
- <!--如果父專案不是spring-boot-starter-parent,需要顯示指定execution-->
- <executions>
- <execution>
- <goals>
- <goal> repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>