原创者:文思
Spring boot maven plugin应用级详解
推荐资料地址:
https://docs.spring.io/spring-boot/docs/current/maven-plugin/
https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html
概览:
Spring boot maven plugin的五个全局属性:
1、spring-boot:run
Requires a Maven project to be executed.需要是一个mave项目。Requires dependency resolution ofartifacts in scope: test. 需要在test阶段范围内解析工件的依赖性
Since version: 1.1.当前1.1版本
Binds by default to the lifecycle phase: validate. 在验证阶段默认情况下绑定到生命周期阶段
Invokes the execution of the lifecycle phase test-compile priorto executing itself。调用生命周期阶段执行
2、 spring-boot:repackage
描述翻译:
打包成jar或war,打包后并可以使用java -jar命令行执行。使用布局=none不设置时,可以简单的打包成一个jar文件并且嵌套着依赖(并且没有主类,因此不可执行)。可见此属性可将spring boot的依赖都打入到jar里。
Binds by default to the lifecycle phase: package. 打包阶段默认情况下绑定到生命周期
默认使用:
当没有制定finalName时,使用artifactId+version:
3、spring-boot:start
启动一个Spring应用程序。与运行目标相反,这不会阻塞并允许其他目标在应用程序上运行。此目标通常用于集成测试场景,其中应用程序在测试套件之前启动并在测试结束后停止。
4、spring-boot:stop
略
5、spring-boot:build-info
基于文件的当前maven项目生成一个build-info.properties
USAGE:
从这看出repackage应该最常用。想排出一些依赖jar不打进来时,请参考Exclude属性。将来会支持maven-war-plugin插件打war包,目前不支持。
如果打包成zip等非自动运行文件,则必须指程序入口运行的主类:
如果需要配置文件动态更新,即热部署,则使用属性addResources:
针对打成jar包的应用怎么像在本地debug一样调试,可参考jvmArguments属性:
当指定了JVM参数或代理,否则运行目标在相同的进程中运行。您可以启用或禁用属性断点。
如果需要对进程进行分叉并调试它,可以添加必要的JVM参数以启用远程调试。以下配置暂停进程,直到调试器连接到端口5005
启用远程调试的执行命令:mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
其它需求参见官网Examples
Spring boot reference中也有对此插件的简单描述:
用ide工具的maven install打包或者命令行执行:mvn package即可打包。
如果不包含< execution />配置,但又仅仅只配置了repackage时,可以自己在运行插件。
比如pom中配置成这样:
虽然也有goal:repackage,但是外面没有包含属性,则手工命令行执行:mvn package spring-boot:repackage,才能将spring boot的依赖包都打进来,只执行mvn package无法将spring boot的依赖jar包打进来。
在pom中可以指定要打的包类型,jar或者war:
但是若要构建一个可执行文件并可部署到外部容器中的WAR文件,则需要将嵌入的其它容器(不需要嵌入其它容器依赖时不用管)的依赖项标记为“provided”,如下所示:
lib-provided下:
如果不标记为provided的话,都会打到lib下:
导致web容器下运行启动报错。如果在外部容器下运行,应用项目本身lib中不需要嵌入其它容器依赖,则建议打包时在pom中去掉容器依赖包: