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
2. 配置 pom.xml 文件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.0.1.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
3.mvn package spring-boot:repackage 说明
Spring Boot Maven plugin 的最主要 goal 就是 repackage,其在 Maven 的 package 生命周期阶段,能够将 mvn package 生成的软件包,再次打包为可执行的软件包,并将 mvn package 生成的软件包重命名为 *.original。
基于上述配置,对一个生成 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
<properties> <it.skip>false</it.skip> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <skip>${it.skip}</skip> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.4.RELEASE</version> <executions> <execution> <id>pre-integration-test</id> <goals> <goal>start</goal> </goals> <configuration> <skip>${it.skip}</skip> </configuration> </execution> <execution> <id>post-integration-test</id> <goals> <goal>stop</goal> </goals> <configuration> <skip>${it.skip}</skip> </configuration> </execution> </executions> </plugin> </plugins> </build>
注意,it.skip 变量用作是否跳过 integration-test 的标志位。
maven-failsafe-plugin 用作 integration-test 的主要执行目标。
spring-boot-maven-plugin 用以为 integration-test 提供支持。
执行 integration-test 的 Maven 命令如下:
mvn verify
或者
mvn verify -Dit.skip=false
参考链接:68. Spring Boot Maven Plugin
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
原文地址:https://www.cnblogs.com/liaojie970/p/9007577.html