Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

2025-07-10 18:50

本文主要是介绍Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start...

一 spring-boot-maven-plugin 插件的5个Goals

spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin;重新打包存在的jar或者war包从而使他们可以在命令行使用jar -jar来执行,使用layout=NONE也可以简单的打包有嵌套依赖的jar(没有主类,所以无法执行);它可以替代常规的构件或者连接到构建生命周期并有独立的分级。

spring-boot:run,运行Spring Boot应用

spring-boot:start,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理;启动Spring应用程序。和run目标不同,该目标不会阻塞,并且允许其他目标来操作应用程序。这个目标通常是在应用程序集成测试套件开始之前和停止之后的继承测试脚本中使用;集成spring boot应用程序到集成测试阶段,从而使应用程序在集成测试程序之前启动

spring-boot:stop,在mvn integration-test阶段,进行Spring Boot应用生命周期的管理;停止使用start目标启动的spring应用程序,通常在测试套件完成后被调用。;集成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>

二 应用场景

1 重新打包应用

为了重新打包应用,只需要在pom文件中的plugin配置中如下:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
         <execution>
            <goals>
                <goal>repackage</goal>
      python       </goals>
         </execution>
    </executions>
</plugin>

2 运行应用程序

插件包含了一个run目标,该目标能够从命令行执行应用程序: mvn spring-boot:run

默认情况下,应用从Maven的JVM运行。如果需要在分支中运行,则指定fork选项。如果指定了jvmArguments或者agent参数,分支进程也会执行。

如果需要制定某些JVM参数(如为了debug),可以使用jvmArguments参数,更多细节参考 调试应用 一章。方便起见,为了启用总则(profiles),可以使用特定(profiles)属性来处理,参考 指定使用的配置文件 一章。

Spring Boot 1.3已经推出了devtools,它是提升使用Spring Boot应用开发时经验的一个模块。启用该模块,仅仅在项目中添加如下配置即可:

org.springframework.boot spring-boot-devtools 1.3.0.BUILD-SNAPSHOT true

目前最新是2.0.0.BUILD-SNAPSHOT了。

当devtools运行时,会在重新编译应用时进行检测变化并且自动刷新。这不仅包括资源文件,也包括代码。它也提供了一个激活的可以重加在的服务器,所以不管任何改变都会自动出发浏览器刷新。

devtools也可配置成仅仅静态资源改变时刷新浏览器(也就是忽略代码的改变),仅仅增加如下配置:

spring.devtools.remote.restart.enabled=false

在devtools之前,该插件已经默认支持资源的及时刷新(hot refreshing),为了支持devtools功能,该插件功能已经被禁用。但是可以随时恢复该功能,恢复功能配置如下;

<build>
……
    <plugins>
    ……
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.0.BUILD-SNAPSHOT</version>
            <configuration>
                <addResources>true</addResources>
            </configuration>
        </plugin>
        ……
    </plugins>
    ……
</build>

当启用addResources配置时,任意src/main/resources文件夹在应用运行时将被添加到应用的类路径,同时任意target/class中发现重复的资源将被移除。这将在发布web应用时使资源及时刷新非常有用。例如,当使用htmlcssJavaScript文件时,不用重新编译应用就可以立马看到变化。这对前端开发人员不用下载安装Java IDE就可以工作也是一种非常有用的方式。

需要注意的是,该特性的副作用是在构建时资源过滤不起作用

为了与repackage目标保持一致,run目标在构件类路径下文件时将排除在配置依赖时排除的依赖配置。更详细的的请参考 排除一个依赖 章节。

有时候在运行应用时包含测试依赖也是非常有用的。例如,在测试模式下使用根目录类运行应用。如果希望这样做,可以设置useTestClasspath参数的值为true。注意:尽在运行应用时生效:重新打包目标将不会增加测试依赖到结果jar和war包中。

3 使用集成测试

虽然可以很容易从测试(测试套件)本身启动Spring Boot程序,但可能需要在构建自身来处理。为了确信围绕集成测试的Spring Boot应用的生命周期被合适的管理,可以使用start和stop目标。如下配置:

<build>
……
    &pythonlt;plugins>
    ……
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.0.BUILD-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>pre-integration-test</id>
                    <goals>
                        <goal>start</goal>
                    </goals>
                </execution>
                <execution>
                    <id>post-integration-test</id>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>China编程
        ……
    </plugins>
    ……
</build>

这样的设置现在可以使用failsafe-plugin来运行你的集成测试,正如你所期待的哪样。

更多详细细节,参 考随机端口的集成测试的。

4 自定义分类重打包

默认情况下,repackage目标将使用可执行的构件来替代原始的构件。如果希望保留原是构件,并且也使用不同的分类来附属保留可执行的构件,可以配置如下:

说明:如果不适用repackage目标,那么maven执行package命令生成的jar包只有一个,名称为pom.xml里面配置的name(artifactId)-version.jar

如果加入了repackage配置,则maven打包生成的jar包会被重命名为name-version.jar.original,使用repackage重新打包生成的jar包名称为name-version.jar,

下面的配置就是如果希望保留原始构件生成的jar包名称不变,同时也想保留repackage打包生成的jar包,可以自定义命名。

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.BUILD-SNAPSHOT</version>
                <executions>
                    <execution>
www.chinasem.cn                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <classifier>exec</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

如上配置,那么使用repackage重新生成的包的名称就是name-version-exec.jar,就是在version后面追加了configuration节点中的classifier节点中的值,该值是自定义的。但是如果classifier节点中什么值都不写,那么就和默认的repackage配置一样,即原始的构件为name-version.jar.original,repackage打包的jar为name-version.jar

5 排除依赖

默认情况下,repackage和run目标都会包含所有provided scope的依赖。基于boot的项目应该考虑provided scope的依赖就像容器所需要的依赖包来使应用可以运行。

**有三种方式可以排除运行时被打包使用的依赖
1、通过指定groupId和artifactId来排除依赖(如果需要可以指定classifier,这是可选的)
2、通过指定artifactId,来排除所有匹配的依赖
3、通过指定groupId,来排除所有属于该group的依赖
如下通过指定groupId和artifactId排除依赖 **

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.BUILD-SNAPSHOT</version>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>com.foo</groupId>
                            <artifactId>bar</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

如上配置就会排除对com.foo:bar的jar包

如下通过指定artifactId,来排除artifactId与此匹配的所有依赖

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.BUILD-SNAPSHOT</version>
                <configuration>
                    <excludeArtifactIds>my-lib,another-lib</excludeArtifactIds>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

如上配置就会排除所有artifactId为my-lib和another-lib的jar包

如下通过指定groupId,来排除groupId与此匹配的所有依赖

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.BUILD-SNAPSHOT</version>
                <configuration>
                    <excludeGroupIds>com.foo</excludeGroupIds>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

如上配置则排除掉所有groupId为com.foo的jar包

###6 调试应用

默认情况下,run目标和mvn命令是在同一个进程中执行的,除非jvm参数或者客户端明确指定。可以通过使用fork属性明确的开启或者关闭是否在同一进程中执行。
如果需要fork这个进程并且进行调试,可以添加需要的JVM参数来开启远程调试。如下配置为挂起进程,直到有调试请求从5005端口进入

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.BUILD-SNAPSHOT</version>
                <configuration>
                    <jvmArguments>
        -Xdebug -Xrunjdwp:transport=dt_sorket,server=y,suspend=y,address=5005
</jvmArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

需要注意的是,只要你指定了这些JVM参数,这个进程就会自动被fork。这些jvm擦书也可以在命令行中指定,确认书写正确:

mvn spring-boot:run -Drun.jvmArguments=“-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005”

7 集成测试的随机端口

Spring Boot集成测试的一个好特性是它能够为Web应用分配一个空闲端口。当start目标插件使用时,Spring Boot应用是被分离执行的,这让传递给集成测试程序本身实际的端口变得非常困难

如下的配置展示如何使用build-help-plugin插件达到相同的特性。

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>reserve-tomcat-port</id>
                        <goals>
                            <goal>reserve-network-port</goal>
                        </goals>
                        <phase>process-resources</phase>
                        <configuration>
                            <portNames>
                                <portName>tomcat.http.port</portName>
                            </portNames>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.BUILD-SNAPSHOT</version>
             China编程   <executions>
                    <execution>
                        <id>pre-integration-test</id>
                        <goals>
                            <goal>start</goal>
                        </goals>
                        <configuration>
                            <arguments>
                                <argument>--server.port={tomcat.http.port}
                                </test.server.port>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

现在可以在任意的集成测试中查询test.server.port系统属性来给server创建一个合适的url。

8 指定使用的配置文件

一个特定应用使用的配置文件可以通过profiles参数指定。如下配置启动了foo和bar两个配置文件:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.BUILD-SNAPSHOT</version>
                <configuration>
                    <profiles>
                        <profile>foo</profile>
                        <profile>bar</profile>
                    </profiles>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

使用哪个配置文件也可以通过命令行参数配置,如果有多个,需要使用都好将他们隔开:

mvn spring-boot:run -Drun.profiles=bar,foo

到此这篇关于Spring Boot spring-boot-maven-plugin 参数配置详解的文章就介绍到这了,更多相关springboot spring-boot-maven-plugin 参数配置内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155350

相关文章

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映