美文网首页
maven插件(2) - spring boot 插件

maven插件(2) - spring boot 插件

作者: aaron1993 | 来源:发表于2017-11-18 20:55 被阅读0次

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示例中有),可选值有如下:

  1. WAR, 此时Main-Class如上
  2. JAR, 此时Main-Class 是JarLauncher
  3. ZIP, 包目录结构类似JAR,实时Main-Class是PropertiesLauncher
  4. MODULE,只将当前module打进包,且不包含任何XXXLauncher
  5. 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

相关文章

网友评论

      本文标题:maven插件(2) - spring boot 插件

      本文链接:https://www.haomeiwen.com/subject/ylqyvxtx.html