1. 程式人生 > >maven(四) Spring Boot Maven plugin詳解

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及以後。

  1. 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

  1. 配置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