spring-boot-maven-plugin插件
spring-boot-maven-plugin插件对Apache Maven提供Spring Boot支持,它允许你在运行集成测试之前打包可执行jar或war文件目录,运行spring boot应用程序,生成构建信息并启动spring boot应用。Maven版本必须是3.6.3或更高版本。
spring-boot-maven-plugin插件对Apache Maven提供Spring Boot支持,它允许你在运行集成测试之前打包可执行jar或war文件目录,运行spring boot应用程序,生成构建信息并启动spring boot应用。
Maven版本必须是3.6.3或更高版本。
一、简单使用示例
- 要使用spring-boot-maven-plugin插件,请在pom xml的plugins插件部分包含相应的xml,如下所示:
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>getting-started</artifactId>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- Maven用户可以从spring-boot-starter-parent父项目中继承获得合适的默认值,示例如下:
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
</parent>
其中spring-boot-starter-parent的父pom是spring-boot-dependencies,用户在引入其它starter时可以不用指定对应的版本号。
-
springboot项目的pom不指定spring-boot-starter-parent对应的父pom
你可能有理由不继承spring-boot-starter-parent作为父及POM,也可能是你有自己需要使用的公司标准父级,或者你更喜欢显示声明所有Maven配置。
如果你不想使用spring-boot-starter-parent父级,你仍然可以通过使用导入范围的依赖关系来保持依赖关系(但不支持插件依赖管理)的好处,如下所示:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
二、spring-boot-maven-plugin插件有如下Goal(目标)
官网:https://docs.spring.io/spring-boot/maven-plugin/goals.html
目标 | 描述 |
---|---|
spring-boot:repackage | 重新打包现有的jar和war档案,以便可以使用java -jar用命令行执行,layout=NONE 可以用于打包具有嵌套依赖关系的jar(没有主类,因此不可以执行) |
spring-boot:run | 立即运行应用程序 |
spring-boot:start | 启动spring应用程序,与运行goal(目标)run相反,这不会阻止并且允许其它goal在 应用程序上运行。此goal通常用于集成测试场景,其中应用程序在测试套件之前 启动,之后停止。 |
spring-boot:stop | 停止已由"start" goal启动的应用程序,统称在测试套件完成后调用。 |
三、打包可执行文件档案
该插件可以创建包含应用程序所有依赖项的可执行档案(jar文件和war文件),然后可以使用java -jar运行。
打包可执行档案由repackage goal执行,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
repackage goal不可以在命令行上单独使用,因为它在package阶段生成的源jar(war)上运行。要在命令行上使用此goal,你必须包含package阶段:mvn package spring-boot:repackge。
如果你使用spring-boot-starter-parent,父级,则此类执行已经预先配置了repackage执行ID,因此只需添加插件定义。
三、重写MANIFEST.INF清单文件的Start-Class和Main-Class
spring-boot-maven-plugin插件会重写MANIFEST.INF清单文件,特别是管理的Start-Class和Main-Class条目,如果默认值不起作用,则必须配置spring boot 插件,而不是在jar插件,清单中的Main-Class是被spring boot插件的layout属性控制,如下示例:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start.class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
如下是一个MANIFEST.INF清单文件:
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.3.0
Build-Jdk-Spec: 17
Main-Class: org.springframework.boot.loader.launch.JarLauncher
Start-Class: com.eastmoney.emis.App
Spring-Boot-Version: 3.3.3
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
layout属性默认由存档类型(jar或war)确定,以下layout属性值可用:
- JAR:常规可执行JAR布局(spring boot plugin不指定layout属性的默认配置);
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.3.0
Build-Jdk-Spec: 17
Main-Class: org.springframework.boot.loader.launch.JarLauncher
Start-Class: com.eastmoney.emis.App
Spring-Boot-Version: 3.3.3
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
- WAR:可执行的WAR布局,提供的依赖项放置在WEB-INF/lib中,以避免在servlet容器中部署war时发生任何冲突;
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.3.0
Build-Jdk-Spec: 17
Main-Class: org.springframework.boot.loader.launch.WarLauncher
Start-Class: com.eastmoney.emis.App
Spring-Boot-Version: 3.3.3
Spring-Boot-Classes: WEB-INF/classes/
Spring-Boot-Lib: WEB-INF/lib/
Spring-Boot-Classpath-Index: WEB-INF/classpath.idx
Spring-Boot-Layers-Index: WEB-INF/layers.idx
- ZIP(别名是DIR):类似于JAR layout使用PropertiesLauncher;
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.3.0
Build-Jdk-Spec: 17
Main-Class: org.springframework.boot.loader.launch.PropertiesLauncher
Start-Class: com.eastmoney.emis.App
Spring-Boot-Version: 3.3.3
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
- NONE:捆绑所有依赖项和项目资源,不捆绑引导加载程序,即指定此类型的jar包不可执行;
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.3.0
Build-Jdk-Spec: 17
Main-Class: com.eastmoney.emis.App
Spring-Boot-Version: 3.3.3
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)