1. Spring Boot Maven 插件
Spring Boot的maven插件能够以maven命令行的方式提供对spring boot 应用打包和运行的支持。
使用spring boot maven插件
在pom中加入如下配置:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.4.RELEASE</version>
<configuration>
<layout>WAR</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
spring-boot-maven-plugin
包含如下几个goal:
goal | 解释 |
---|---|
repackage | build一个可执行的jar或者war包 |
run | 运行springboot应用 |
start ,stop | 这两个配合在一起,绑定在integration-test这个phase,可以运行测试前后启动停止spring boot应用 |
1.1 repackage
绑定在package
这个phase上,可以为spring boot应用生成一个可执行的jar或war包。
以上面的plugin配置为例,运行mvn package
会生成两个jar包,一个是原始jar包(也就是不使用这个插件时运行mvn package
生成的jar包),一个是可执行的spring boot 应用的jar包。
下面是我的一个使用spring boot插件实例项目生成的两个war包(jar包类似):
webtest-1.0-SNAPSHOT.war 插件生成的war包
webtest-1.0-SNAPSHOT.war.original 这是原始的war包
原始包被重命名成以.original
为后缀的包,改变后缀可使用如下配置方式:
<plugin>
...
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<!--原始包的后缀将变成.exec-->
<classifier>exec</classifier>
</configuration>
</execution>
</plugin>
repackage生成的jar/war包会修改MANIFEST.MF文件,比如下面是我生成的war包中的MANIFEST.MF文件内容:
Manifest-Version: 1.0
Spring-Boot-Classes: WEB-INF/classes/
Built-By: eric
Build-Jdk: 1.7.0_71
Start-Class: me.test.webtest.WebMain
Created-By: Apache Maven 3.3.9
Spring-Boot-Lib: WEB-INF/lib/
Spring-Boot-Version: 1.5.4.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher
Archiver-Version: Plexus Archiver
我的测试项目main方法在WebMain这个类里面,但是可以看到生成的manifest文件中Main-Class是WarLaucher,还多了一个叫Start-Class的属性值是才是我的main方法所在类。
这是跟spring boot的启动方式有关系,运行该war包先启动WarLauncher会完成一些前期准备工作,完后最终会加载WebMain运行。打成jar也是一样的道理。
最终打包的的类型取决<layout>这个元素(第一个pom示例中有),可选值有如下:
- WAR, 此时Main-Class如上
- JAR, 此时Main-Class 是JarLauncher
- ZIP, 包目录结构类似JAR,实时Main-Class是PropertiesLauncher
- MODULE,只将当前module打进包,且不包含任何XXXLauncher
- NONE, 和MODULE的区别是它会把当前的module的依赖也会打进包
1.2 run
在命令行运行mvn spring-boot:run
可以启动spring boot应用(不过一般我们调试不都是直接在ide里点吗)。
可以通过如下配置给启动的jvm传递参数:
<plugin>
...
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
</configuration>
...
</plugin>
dev-tools
spring boot 1.3之后引入了dev-tools
可以让你方便开发应用,在spring boot应用启动后,它监听资源文件的改变,或者重新编译生成class,有变化之后自动刷新(repackage是不会把dev-tools打进包的,所以生产环境dev-tool是不会起作用的)。
通过在pom中引入:
<dependencies>
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.5.4.RELEASE</version>
<!--指定optional为true可以避免被repackage打war时devtools也被打进war包-->
<optional>true</optional>
</dependency>
...
</dependencies>
可以通过设置spring.devtools.remote.restart.enabled=false
这个java系统属性,是的dev-tools只在静态资源改变是才刷新。
1.4 start stop
没用过~~~,想了解请参考 附
附
本文参考spring boot官网spring boot maven plugin
网友评论