Spring Boot的Maven插件Spring Boot Maven plugin详解

2023-05-16

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

2. 配置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。

基于上述配置,对一个生成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: sam
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

 

参考链接:

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
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot的Maven插件Spring Boot Maven plugin详解 的相关文章

随机推荐

  • jdk8——字符串数组按照指定要求分组后取最大值

    要求 xff1a 如下月份数据 xff1a 34 20220901 34 34 20220912 34 34 20220923 34 34 20220929 34 34 20221010 34 34 20221101 34 34 20221
  • https证书识别和转换

    1 证书识别 xff1a 安全证书如下 xff1a BEGIN CERTIFICATE END CERTIFICATE 普通私钥如下 xff1a BEGIN PRIVATE KEY END PRIVATE KEY RSA 私钥如下 xff1
  • svn 常用命令

    svn简介 xff1a Subversion SVN 是一个开源的版本控制系統 也就是说 Subversion 管理着随时间改变的数据 这些数据放置在一个中央资料档案库 repository 中 这个档案库很像一个普通的文件服务器 不过它会
  • 浏览器的知识

    1 浏览器可视窗口大小 43 获取浏览器可视窗口的大小 43 语法 61 gt window innerWidth 61 gt window innerHeight 43 注意 获取的是包含滚动条在内的尺寸 MAC 除外 console l
  • C# winform中 窗体缩放自适应的方法(不同电脑/不同分辨率)

    窗体缩放是一个困扰我多时的问题 xff0c 为了解决这个问题 xff0c 我从网上找了很多相关的资料 xff0c 很多人说用Anchor和Dock属性 xff0c 但是我试了以后 xff0c 始终不能达到想要的效果 后来 xff0c 搜到了
  • Spyder闪退、启动失败的解决办法。UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xa9 in position 226······

    Spyder版本号 Spyder5 1 5 Python 3 9 12 1 闪退时的现象 早上还在用spyder分析数据 xff0c 到下午再打开电脑就发现spyder闪退 xff0c 利用anaconda的prompt进行启动 xff0c
  • IT项目经理如何正确做好项目实施

    本文摘自 光环国际 中国项目管理PMP培训上市企业 对自己的能力有清晰认识 xff1a 局限 你需要客观的评价自己的长处和短处 xff0c 并且着手缩小自己的差距 做软件的人常常被认为缺乏出色的交际能力 你需要加强你的人际处理能力 xff0
  • 解决Centos/Mysqld 重启或关机时间慢问题

    项目场景 xff1a 提示 xff1a centos 8测试环境中 xff0c 将通过二进制安装的服务添加到systemd服务管理中 xff0c 并对其进行测试 xff0c 看是否能满足线上需求 xff0c 即开机自动启动 由于添加到sys
  • You don‘t have enough free space in /var/cache/apt/archives

    在执行 sudo apt install 来安装一些包时候遇到过这个问题 xff0c 网上查了很多资料 xff0c 很多简单粗暴的解决方案如下 xff1a span class token function sudo span apt au
  • mysql创建超级用户,更新用户权限

    insert into user Host User Password Select priv Insert priv Update priv Delete priv Create priv Drop priv Reload priv Sh
  • VNC端口被占用:a vnc server is already running as

    其实这些端口可能是以前的一些用户占用的 当他们离开这太服务器的时候并没有释放资源 后来在网上查找 xff0c 才找到了杀死这些进程的方法 其实每个端口都是vncserver的一个进程 1 所以我们使用 ps ef grep vnc 就能查到
  • 【图像处理】C++实现模板匹配

    预先判断 3 3十字中心 区域是否相似 xff0c 如果相似 xff0c 则再匹配判断 这样可以减少判断次数 前提 xff1a 模板大于9 9 BOOL Judgement BYTE pTempDataBuf BYTE pTemplateB
  • CPython的命令行与python文件的执行

    在Windows系统中 xff0c 下载并安装了Python解析器后 xff0c 就可以运行Python文件了 可以使用任何编辑器 xff0c 编写并保存Python文件 Python运行时提供了多种执行Python文件的方法 1 编写并保
  • Java运行时的shutdown hook

    Hook作为一种回调方式 xff0c 广泛应用于软件中 从Java 1 3开始 xff0c JVM的Runtime也提供了hook的机制 xff0c 即shutdown hook 提供给出shutdown hook xff0c 在退出JVM
  • Apache Maven Resources Plugin插件详解

    Apache Maven Resources Plugin是Apache Maven团队提供的官方核心插件 xff0c 能够将Maven项目中的各种资源文件复制到指定的输出目录中 1 在Maven项目中的资源可以分为两类 main资源 xf
  • TestNG测试的并发执行详解

    TestNG在执行测试时 xff0c 默认suitethreadpoolsize 61 1 xff0c randomizesuites 61 false xff0c 即非并发顺序执行测试 但是TestNG提供了多种方式 xff0c 以支持测
  • Maven的pom.xml文件结构之Build配置build

    在Maven的pom xml文件中 xff0c Build相关配置包含两个部分 xff0c 一个是 lt build gt xff0c 另一个是 lt reporting gt xff0c 这里我们只介绍 lt build gt 1 在Ma
  • Docker容器的重启策略及docker run的--restart选项详解

    1 Docker容器的重启策略 Docker容器的重启策略是面向生产环境的一个启动策略 xff0c 在开发过程中可以忽略该策略 Docker容器的重启都是由Docker守护进程完成的 xff0c 因此与守护进程息息相关 Docker容器的重
  • docker run的--rm选项详解

    在Docker容器退出时 xff0c 默认容器内部的文件系统仍然被保留 xff0c 以方便调试并保留用户数据 但是 xff0c 对于foreground容器 xff0c 由于其只是在开发调试过程中短期运行 xff0c 其用户数据并无保留的必
  • Spring Boot的Maven插件Spring Boot Maven plugin详解

    Spring Boot的Maven插件 xff08 Spring Boot Maven plugin xff09 能够以Maven的方式为应用提供Spring Boot的支持 xff0c 即为Spring Boot应用提供了执行Maven操