maven(四) Spring Boot Maven plugin詳解
Spring Boot的Maven外掛(Spring Boot Maven plugin)能夠以Maven的方式為應用提供Spring Boot的支援,即為Spring Boot應用提供了執行Maven操作的可能。
Spring Boot Maven plugin能夠將Spring Boot應用打包為可執行的jar或war檔案,然後以通常的方式執行Spring Boot應用。
Spring Boot Maven plugin的最新版本為2017.6.8釋出的1.5.4.RELEASE,要求Java 8, Maven 3.2及以後。
- Spring Boot Maven plugin的5個Goals
spring-boot:repackage,預設goal。在mvn package之後,再次打包可執行的jar/war,同時保留mvn package生成的jar/war為.origin
spring-boot:run,執行Spring Boot應用
spring-boot:start,在mvn integration-test階段,進行Spring Boot應用生命週期的管理
spring-boot:stop,在mvn integration-test階段,進行Spring Boot應用生命週期的管理
spring-boot:build-info,生成Actuator使用的構建資訊檔案build-info.properties
- 配置pom.xml檔案
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.4.RELEASE</version> </plugin> </plugins> </build>
3.mvn package spring-boot:repackage說明
Spring Boot Maven plugin的最主要goal就是repackage,其在Maven的package生命週期階段,能夠將mvn package生成的軟體包,再次打包為可執行的軟體包,並將mvn package生成的軟體包重新命名為.original*。
注意:在用idea除錯的時候加不加外掛都可以啟動,看不出來不同,所以必須要獨立啟動jar包才可以看出來。
而且如果用了spring boot但是不需要獨立啟動,就不要加這個外掛,否則spring boot會因為找不到啟動類而導致報錯
基於上述配置,對一個生成Jar軟體包的專案執行如下命令。
mvn package spring-boot:repackage
可以看到生成的兩個jar檔案,一個是*.jar,另一個是*.jar.original。
在執行上述命令的過程中,Maven首先在package階段打包生成*.jar檔案;然後執行spring-boot:repackage重新打包,查詢Manifest檔案中配置的Main-Class屬性,如下所示:
Manifest-Version: 1.0
Implementation-Title: gs-consuming-rest
Implementation-Version: 0.1.0
Archiver-Version: Plexus Archiver
Built-By: exihaxi
Implementation-Vendor-Id: org.springframework
Spring-Boot-Version: 1.5.3.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.ericsson.ramltest.MyApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_131
注意,其中的Main-Class屬性值為org.springframework.boot.loader.JarLauncher;
Start-Class屬性值為com.ericsson.ramltest.MyApplication。
其中com.ericsson.ramltest.MyApplication類中定義了main()方法,是程式的入口。
通常,Spring Boot Maven plugin會在打包過程中自動為Manifest檔案設定Main-Class屬性,事實上該屬性究竟作用幾何,還可以受Spring Boot Maven plugin的配置屬性layout控制的,示例如下。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.4.RELEASE</version>
<configuration>
<mainClass>${start-class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
注意,這裡的layout屬性值為ZIP。
layout屬性的值可以如下:
JAR,即通常的可執行jar
Main-Class: org.springframework.boot.loader.JarLauncher
WAR,即通常的可執行war,需要的servlet容器依賴位於WEB-INF/lib-provided
Main-Class: org.springframework.boot.loader.warLauncher
ZIP,即DIR,類似於JAR
Main-Class: org.springframework.boot.loader.PropertiesLauncher
MODULE,將所有的依賴庫打包(scope為provided的除外),但是不打包Spring Boot的任何Launcher。
NONE,將所有的依賴庫打包,但是不打包Spring Boot的任何Launcher。
4.integration-test階段中的Spring Boot Maven plugin的start/stop
spring-boot-maven-plugin用以為integration-test提供支援。
執行integration-test的Maven命令如下:
mvn verify
或者
mvn verify -Dit.skip=false
參考連結:
http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/maven-plugin/
https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html