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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM