简介

  Spring Boot Maven Plugin插件提供spring boot在maven中的支持。允许你打包可运行的jar包或war包。

  插件提供了几个maven目标和Spring Boot 应用一起工作。总的有:

  • spring-boot:repackage  请阅读:Spring cloud的Maven插件(一):repackage目标
  • spring-boot:run  请阅读:Spring cloud的Maven插件(二):run目标
  • spring-boot:start and spring-boot:stop
  • spring-boot:build-info

  repackage:创建一个自动可执行的jar或war文件。它可以替换常规的artifact,或者用一个单独的classifier附属在maven构建的生命周期中。

  下面我们详细看下repackage这个目标。

一、简单引用

  用了重新打包应用程序,我们需要在pom.xml文件中加一个简单的引用到Spring Boot Maven Plugin插件中,代码如下:repaceage 最简单的结构

 1 <build>2   ...3   <plugins>4     ...5     <plugin>6       <groupId>org.springframework.boot</groupId>7       <artifactId>spring-boot-maven-plugin</artifactId>8       <version>1.5.7.RELEASE</version>9       <executions>
10         <execution>
11           <goals>
12             <goal>repackage</goal>
13           </goals>
14         </execution>
15       </executions>
16     </plugin>
17     ...
18   </plugins>
19   ...
20 </build>

二、剔除不需要的依赖

  这个例子重新打包了一个jar包或war包,这个jar包或war包被构建于maven生命周期的package阶段,包括定义在工程中的任何依赖(包括scope为provided)。如果有一些依赖模块需要被排除掉,可以使用一个exclude的选项。

  默认情况下,repackage和run这两个maven目标会包括定义在工程中的任何依赖。一些依赖被要求从可执行jar包中排除。下面有三种方式可以在包运行时排除依赖模块。

  方式1::排除一个具体的maven 模块,通过唯一的groupId和artifactId组合来实现。(如果有必要,可以加入classifier来唯一确认。)

 1 <project>2   ...3   <build>4     ...5     <plugins>6       ...7       <plugin>8         <groupId>org.springframework.boot</groupId>9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.6.RELEASE</version>
11         <configuration>
12           <excludes>
13             <exclude>
14               <groupId>com.foo</groupId>
15               <artifactId>bar</artifactId>
16             </exclude>
17           </excludes>
18         </configuration>
19         ...
20       </plugin>
21       ...
22     </plugins>
23     ...
24   </build>
25   ...
26 </project>

  方式2:排除和“指定的artifactId”相符的所有maven模块。

 1 <project>2   ...3   <build>4     ...5     <plugins>6       ...7       <plugin>8         <groupId>org.springframework.boot</groupId>9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.6.RELEASE</version>
11         <configuration>
12           <excludeArtifactIds>my-lib,another-lib</excludeArtifactIds>
13         </configuration>
14         ...
15       </plugin>
16       ...
17     </plugins>
18     ...
19   </build>
20   ...
21 </project>

  方式3:排除属于“指定的groupId”的所有maven模块。

 1 <project>2   ...3   <build>4     ...5     <plugins>6       ...7       <plugin>8         <groupId>org.springframework.boot</groupId>9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.6.RELEASE</version>
11         <configuration>
12           <excludeGroupIds>com.foo</excludeGroupIds>
13         </configuration>
14         ...
15       </plugin>
16       ...
17     </plugins>
18     ...
19   </build>
20   ...
21 </project>

三、重写manifest 

  这个插件还可以重写项目的manifest (可运行jar包的MANIFEST.MF),特别是管理Main-Class和Start-Class启动类。如果默认的配置不能满足需求,我们可以在这里做配置。通过插件的layout属性可以确实地控制Main-Class。

 1 <build>2   ...3   <plugins>4     ...5     <plugin>6       <groupId>org.springframework.boot</groupId>7       <artifactId>spring-boot-maven-plugin</artifactId>8       <version>1.5.7.RELEASE</version>9       <configuration>
10         <mainClass>${start-class}</mainClass>
11         <layout>ZIP</layout>
12       </configuration>
13       <executions>
14         <execution>
15           <goals>
16             <goal>repackage</goal>
17           </goals>
18         </execution>
19       </executions>
20     </plugin>
21     ...
22   </plugins>
23   ...
24 </build>

  执行打包命令:mvn package spring-boot:repackage。注意:这里不能写成mvn spring-boot:repackage。否则会报Source must refer to an existing file异常。

  layout属性默认根据archive type(jar or war)而定。总的有5中类型:

  • JAR:常规的可执行jar包的布局。
  • WAR:可执行war包的布局。
  • ZIP(和DIR一样):和使用PropertiesLauncher的jar包布局一样。
  • MODULE:包括依赖包(排除scope为provided的依赖包)和项目资源
  • NONE:包括所有的依赖包和项目资源。

四、利用classifier分离代码包和依赖包

  当自己写项目需要发布出去给别人依赖时,就只需要自己写的代码打包,依赖的包不能打进来。否则最后别人在用你提供的包时,就会出现重复包,导致最后打包时包会非常巨大。

  在这个Spring Boot Maven Plugin这个插件下,我们只需要提供classifier即可实现这个功能。具体如下:

 1 <project>2   ...3   <build>4     ...5     <plugins>6       ...7       <plugin>8         <groupId>org.springframework.boot</groupId>9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.7.RELEASE</version>
11         <executions>
12           <execution>
13             <goals>
14               <goal>repackage</goal>
15             </goals>
16             <configuration>
17               <classifier>exec</classifier>
18             </configuration>
19           </execution>
20         </executions>
21         ...
22       </plugin>
23       ...
24     </plugins>
25     ...
26   </build>
27   ...
28 </project>

五、打包时排除resources下的资源文件

 1 <build>2   ...3     <resources>4         <resource>5             <directory>src/main/resources</directory>6             <excludes>7                 <exclude>**/*.properties</exclude>8                 <exclude>**/*.xml</exclude>9                 <exclude>**/*.yml</exclude>
10             </excludes>
11         </resource>
12     </resources>
13     <plugins>
14       ...
15         <plugin>
16             <groupId>org.springframework.boot</groupId>
17             <artifactId>spring-boot-maven-plugin</artifactId>
18             <executions>
19                 <execution>
20                     <goals>
21                         <goal>repackage</goal>
22                     </goals>
23                 </execution>
24             </executions>
25         </plugin>
26       ...
27     </plugins>
28   ...
29 </build>

Spring boot的Maven插件(一):repackage目标相关推荐

  1. Spring Boot的Maven插件Spring Boot Maven plugin详解

    pring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven ...

  2. Spring Boot的Maven插件 spring-boot-maven-plugin

    应用背景:直接使用maven自带的package打包功能,在打Jar包的时候,不会将该项目所依赖的Jar包一起打进去,在使用"java -jar"命令启动项目时会报错,项目无法正常 ...

  3. Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解

    Spring Boot项目三种启动方式及后台运行详解 1 Spring Boot项目三种启动方法 运行Application.java类中的Main方法 项目管理工具启动 Maven项目:mvn sp ...

  4. Spring cloud的Maven插件(一):repackage目标

    简介 Spring Boot Maven Plugin插件提供spring boot在maven中的支持.允许你打包可运行的jar包或war包. 插件提供了几个maven目标和Spring Boot ...

  5. Spring boot的Maven配置依赖

    Spring boot 的 Maven 配置依赖 springboot spring pom maven models 我们通过引用spring-boot-starter-parent,添加sprin ...

  6. Spring Boot 把 Maven 干掉了,正式拥抱 Gradle!

    在国外某社交网站上有一个关于迁移 Spring Boot 迁移 Maven 至 Gradle 的帖子: 该贴子上也有很多人质疑:Maven 用的好好的,为什么要迁移至 Gradle? 虽然该贴子只是说 ...

  7. spring boot 本地maven手动添加pom.xml依赖

    spring boot 本地maven手动添加pom.xml依赖 按照如下pom.xml配置,本地jar包可以正常使用,适用于maven仓库中没有的的jar包下载下来,手动添加依赖. <!-- ...

  8. JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统(附源码)

    文章目录 JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统 一.系统介绍 二.开发步骤 三.系统展示 四.开发总结 五.数据库相关 ...

  9. Spring Boot 使用 Maven assembly 插件打包

    文章目录 1 摘要 2 Maven 核心依赖与配置 2.1 pom.xml 配置 2.2 assembly 配置信息 3 启动与停止脚本 3.1 启动脚本 3.2 停止脚本 4 推荐参考资料 5 Gi ...

最新文章

  1. 贪心算法很简单:跳跃游戏
  2. Linux 初步笔记
  3. 【MySQL distinct的使用】如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中
  4. SAP Commerce web service 的扩展
  5. mysql的联表查询和去重复数据
  6. js 当前日期增加自然月
  7. GMQ钱包致力成为您数字资产安全的保护伞
  8. Java网络编程之服务端中的Socket
  9. 学号 20165329 《Java程序设计》第4周学习总结
  10. 1 在c语言中不正确的常量是 a0xf6,C语言第三章在线测试题目及答案
  11. 计算机二级职业生涯规划讲座心得,职业规划讲座心得体会-
  12. 速腾聚创三维激光雷达 实现cartographer 建图复现工作(代完成)
  13. 精准面试突击55:delete、drop、truncate有什么区别?
  14. php遍历数组查询数据库,php如何遍历数据库查询数组
  15. 联想ThinkPad声音扬声器正常但是不能发出声音,插入耳机有声音
  16. 磁力搜索网站+下载神器放送2019-03-05
  17. python并发编程书籍推荐_《吐血整理》-顶级程序员书单集
  18. 高级计算机网络 外文文献,计算机网络新技术外文文献翻译
  19. PW5328B的锂电池升压9V芯片方案,设计图
  20. hardmard积 用什么符号表示_复数域符号相乘的差分网络编码

热门文章

  1. uds帧格式_UDS最全内容总结
  2. PPT如何添加删除线
  3. 1376:信使(msner)(dijkstar)
  4. Lock篇(三)老城旧梦
  5. “新零售”的下半场战争
  6. laravel框架详解 学以致用
  7. 咸鱼ZTMR实例—自动浇花器
  8. 安防类基础计算机知识,谁能给我一份安防监控基础知识汇总?
  9. android 潮汐接口,潮汐现在支持杜比全景声音乐 但仅在Android设备上
  10. 珐琅彩瓷:是如何涨到天价的