springboot工程中都会配置插件进行编译、打包等操作,下面对常用的maven插件进行简单分析。
一、spring-boot-maven-plugin
spring-boot-maven-plugin能够以maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行maven操作的可能;能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。
spring-boot-maven-plugin提供了7个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;
- spring-boot:build-help,Display help information on spring-boot-maven-plugin.
Call mvn spring-boot:help -Ddetail=true -Dgoal= to display
parameter details. - spring-boot:build-image
repackage就是在maven的package生命周期阶段,能够将mvn package生成的软件包,再次打包为可执行的软件包,并将mvn package生成的软件包重命名为*.original。
二、maven-compiler-plugin
maven-compiler-plugin插件配置了java的开发环境和运行环境,还有文件编码。
<build>
<plugins>
<!-- 配置当前项目的jdk版本信息 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
三、maven-surefire-plugin
maven-surefire-plugin插件用于mvn 生命周期的测试阶段的插件,可以通过一些参数设置方便的在testNG或junit下对测试阶段进行自定义。
maven本身并不是一个单元测试框架,maven所做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行jUnit或者testNG的测试用例。注意需要跳过单元测试,如果工程里存在对数据库进行操作的单元测试必须要使用以下配置将之跳过。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
maven打包springboot应用的插件配置
- 普通jar,用于项目依赖引入,不能通过java -jar xx.jar执行,一般不包含其它依赖的jar包。
- 不可执行jar,包含第三方依赖的jar包,避免生成的jar与第三方引入后出现依赖版本冲突。
- 可执行jar,是一种可执行的jar(executable jar),既包含自己代码中的class ,也包含第三方依赖的jar。
1、生成单个可执行jar,使用springboot提供的maven打包插件spring-boot-maven-plugin即可,pom文件的配置如下:
<build>
<plugins>
<!-- 常规打包,打出来的jar很大,不易于修改部分文件后增量发布 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 作用:项目打成jar的同时将本地jar包也引入进去 -->
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
2、提供给第三方使用的,包含所有依赖的普通jar,使用maven打包插件maven-shade-plugin,pom文件的配置如下:
<build>
<plugins>
<!-- 提供给第三方使用的,包含所有依赖的普通jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!-- 加入启动类 -->
<!--<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>xxx.xxx</mainClass>
</transformer>
</transformers>-->
<createDependencyReducedPom>false</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
3、提供给第三方使用的,仅包含项目代码的普通jar,使用maven打包插件maven-jar-plugin,pom文件的配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>