spring-boot-maven-plugin插件_idea 自动加spring-boot-maven-plugin-程序员宅基地

技术标签: springboot  

<build>
   <plugins>
      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
   </plugins>
</build>
spring boot加上这个插件,才可以使用Java -jar命令来启动jar包,并且有了这个插件,
打的包里面才会有maven依赖的jar包和spring boot的启动类,所以打的jar包也就比较大,
而且MANIFEST.MF文件里面也会有启动类的信息。但是如果不加这个插件,则打的包里面就只有class文件,
没有依赖的Jar包,MANIFEST.MF文件里面也没有启动类的信息,所以如果不加这个插件就不能独立启动。
注意:在用idea调试的时候加不加插件都可以启动,看不出来不同,所以必须要独立启动jar包才可以看出来。
而且如果用了spring boot但是不需要独立启动,就不要加这个插件,否则spring boot会因为找不到启动类而导致报错

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文件

[html]  view plain  copy
  1. <build>  
  2.     <plugins>  
  3.         <plugin>  
  4.             <groupId>org.springframework.boot</groupId>  
  5.             <artifactId>spring-boot-maven-plugin</artifactId>  
  6.                         <version>1.5.4.RELEASE</version>  
  7.         </plugin>  
  8.     </plugins>  
  9. </build>  


3.mvn package spring-boot:repackage说明

Spring Boot Maven plugin的最主要goal就是repackage,其在Maven的package生命周期阶段,能够将mvn package生成的软件包,再次打包为可执行的软件包,并将mvn package生成的软件包重命名为*.original。

基于上述配置,对一个生成Jar软件包的项目执行如下命令。

[html]  view plain  copy
  1. mvn package spring-boot:repackage  

可以看到生成的两个jar文件,一个是*.jar,另一个是*.jar.original。

在执行上述命令的过程中,Maven首先在package阶段打包生成*.jar文件;然后执行spring-boot:repackage重新打包,查找Manifest文件中配置的Main-Class属性,如下所示:

[html]  view plain  copy
  1. Manifest-Version: 1.0  
  2. Implementation-Title: gs-consuming-rest  
  3. Implementation-Version: 0.1.0  
  4. Archiver-Version: Plexus Archiver  
  5. Built-By: exihaxi  
  6. Implementation-Vendor-Id: org.springframework  
  7. Spring-Boot-Version: 1.5.3.RELEASE  
  8. Implementation-Vendor: Pivotal Software, Inc.  
  9. Main-Class: org.springframework.boot.loader.JarLauncher  
  10. Start-Class: com.ericsson.ramltest.MyApplication  
  11. Spring-Boot-Classes: BOOT-INF/classes/  
  12. Spring-Boot-Lib: BOOT-INF/lib/  
  13. Created-By: Apache Maven 3.5.0  
  14. 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控制的,示例如下。

[html]  view plain  copy
  1. <plugin>  
  2.   <groupId>org.springframework.boot</groupId>  
  3.   <artifactId>spring-boot-maven-plugin</artifactId>  
  4.   <version>1.5.4.RELEASE</version>  
  5.   <configuration>  
  6.     <mainClass>${start-class}</mainClass>  
  7.     <layout>ZIP</layout>  
  8.   </configuration>  
  9.   <executions>  
  10.     <execution>  
  11.       <goals>  
  12.         <goal>repackage</goal>  
  13.       </goals>  
  14.     </execution>  
  15.   </executions>  
  16. </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

[html]  view plain  copy
  1. <properties>  
  2.   <it.skip>false</it.skip>  
  3. </properties>  
  4. <build>  
  5.   <plugins>  
  6.     <plugin>  
  7.       <groupId>org.apache.maven.plugins</groupId>  
  8.       <artifactId>maven-failsafe-plugin</artifactId>  
  9.       <configuration>  
  10.         <skip>${it.skip}</skip>  
  11.       </configuration>  
  12.     </plugin>  
  13.     <plugin>  
  14.       <groupId>org.springframework.boot</groupId>  
  15.       <artifactId>spring-boot-maven-plugin</artifactId>  
  16.       <version>1.5.4.RELEASE</version>  
  17.       <executions>  
  18.         <execution>  
  19.           <id>pre-integration-test</id>  
  20.           <goals>  
  21.             <goal>start</goal>  
  22.           </goals>  
  23.           <configuration>  
  24.             <skip>${it.skip}</skip>  
  25.           </configuration>  
  26.         </execution>  
  27.         <execution>  
  28.           <id>post-integration-test</id>  
  29.           <goals>  
  30.             <goal>stop</goal>  
  31.           </goals>  
  32.           <configuration>  
  33.             <skip>${it.skip}</skip>  
  34.           </configuration>  
  35.         </execution>  
  36.       </executions>  
  37.     </plugin>  
  38.   </plugins>  
  39. </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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33314107/article/details/79731899

智能推荐

centos7 镜像下载-程序员宅基地

文章浏览阅读822次。官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/进入后,选择阿里云镜像:http://mirrors.aliyun.com/centos/7/isos/x86_64/各个版本的ISO镜像文件说明:CentOS-7-x86_64-DVD-1708.iso标准安装版(推荐)CentOS-7-x86_64-Everything-1708.iso完整版,集成所有软件(以用来补充系统的软件或者...

pytorch基础学习(一):torch.tensor的用法1-程序员宅基地

文章浏览阅读7.5k次,点赞2次,收藏11次。tensor提供GPU计算和自由梯度import torch#然后我们创建⼀一个5x3的未初始化的 Tensorx = torch.empty(5, 3)print(x)#结果tensor([[1.0469e-38, 9.3674e-39, 9.9184e-39], [8.7245e-39, 9.2755e-39, 8.9082e-39], [9.9184e-39, 8.4490e-39, 9.6429e-39], [1.0653e-38,

一个Android程序至少包含几个线程?-程序员宅基地

文章浏览阅读1.9k次。/ 今日科技快讯 /国务院新闻办公室作日发表《抗击新冠肺炎疫情的中国行动》白皮书,并举行新闻发布会。针对新冠疫苗研发,科技部部长王志刚表示,疫苗研发要把安全性、有效性、可及性放在..._安卓应用一般多少线程

设计一个形状类(接口)Shape,方法:求周长和求面积_描述已知:1.图形类shape,该类中定义了图形的周长属性,以及返回周长的方法。2.-程序员宅基地

文章浏览阅读788次。设计一个形状类(接口)Shape,方法:求周长和求面积_描述已知:1.图形类shape,该类中定义了图形的周长属性,以及返回周长的方法。2.

java xml 格式化输出_JAVA XML格式化输出-程序员宅基地

文章浏览阅读176次。importorg.apache.xml.serialize.OutputFormat;importorg.apache.xml.serialize.OutputFormat;importorg.apache.xml.serialize.XMLSerializer;importorg.w3c.dom.Document;importorg.xml.sax.InputSource;importorg....

MyEclipse创建多模块maven项_myeclipse如何指定pom文件多个-程序员宅基地

文章浏览阅读621次。MyEclipse创建多模块maven项目_myeclipse如何指定pom文件多个

随便推点

I2C设备地址查询_如何查找ch1116中i2c地址-程序员宅基地

文章浏览阅读5.4k次。cd /sys/class/i2c-dev/i2c-2/device/2-0018 //不同的系统路径略有差异 0x18一般为该设备地址.cat name//显示i2c设备名称 /sys/class/i2c-dev //目录显示系统拥有的i2c总线i2c-0 i2c-1 i2c-2 等/sys/class/i2c-dev/i2c-2/device //目录下显示i_如何查找ch1116中i2c地址

ubuntu虚拟机启动卡在挂载目录初始化界面_ubuntu一直在mount-程序员宅基地

文章浏览阅读601次。异常原因为:挂载目录被删除,但是虚拟机启动文件中还有该挂载目录,所以导致卡界面。解决步骤:启动界面Esc键进入配置界面-》选择recovery模式-》root1、 mount / -o remount2、修改/etc/fstab,将错误的挂载信息修改或者删除即可3、reboot..._ubuntu一直在mount

「学习笔记」基环树-程序员宅基地

文章浏览阅读9.3k次,点赞4次,收藏15次。基环树是一种图,它由一个环组成,环上每个点都是一棵树点树根,所以称为基环树。当然,一棵树上连一条边也会变成基环树。下图是一个基环树.基环树一般分成环和树来分别处理(显然环的处理较为麻烦),那首先得找到环.找环大概就是dfs一下,找到一个在此结点之前走过的相邻结点就开始记录环.vector&amp;amp;amp;lt;int&amp;amp;amp;gt; G[MAXN]; //基环树int fa[MAXN]; ..._基环树

win10下MinGW安装及配置_mingw10-程序员宅基地

文章浏览阅读1.9w次,点赞31次,收藏64次。下载MinGW安装管理器进入官网MinGW官网点击右上角download,加载可能有些慢,稍等一下。点击如图下载。下载完install安装点击change选择你要安装的目录,continue继续。等待下载,下载完成后单击continue继续。现在MinGW安装管理器 就有了,可以正式安装MinGW了安装MinGW上一步安装好管理器之后会自动在桌面创建一个快捷方式,双击打开..._mingw10

Java接口和抽象类_java抽象和接口-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏5次。Java中接口是很重要的_java抽象和接口

【总结】C++继承详解----包含派生类成员函数详解:构造重载隐藏_c++ 派生类隐藏基类函数-程序员宅基地

文章浏览阅读697次。虚函数小结1) 虚函数是动态绑定的,也就是说,使用虚函数的指针和引用能够正确找到实际类的对应函数,而不是执行定义类的函数。这是虚函数的基本功能,就不再解释了。2) 构造函数不能是虚函数。而且,在构造函数中调用虚函数,实际执行的是父类的对应函数,因为自己还没有构造好, 多态是被disable的。3) 析构函数可以是虚函数,而且,在一个复杂类结构中,这往往是必须的(delete 指向子类的..._c++ 派生类隐藏基类函数

推荐文章

热门文章

相关标签