Spring boot的Maven插件(一):repackage目标
简介
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目标相关推荐
- Spring Boot的Maven插件Spring Boot Maven plugin详解
pring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven ...
- Spring Boot的Maven插件 spring-boot-maven-plugin
应用背景:直接使用maven自带的package打包功能,在打Jar包的时候,不会将该项目所依赖的Jar包一起打进去,在使用"java -jar"命令启动项目时会报错,项目无法正常 ...
- Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解
Spring Boot项目三种启动方式及后台运行详解 1 Spring Boot项目三种启动方法 运行Application.java类中的Main方法 项目管理工具启动 Maven项目:mvn sp ...
- Spring cloud的Maven插件(一):repackage目标
简介 Spring Boot Maven Plugin插件提供spring boot在maven中的支持.允许你打包可运行的jar包或war包. 插件提供了几个maven目标和Spring Boot ...
- Spring boot的Maven配置依赖
Spring boot 的 Maven 配置依赖 springboot spring pom maven models 我们通过引用spring-boot-starter-parent,添加sprin ...
- Spring Boot 把 Maven 干掉了,正式拥抱 Gradle!
在国外某社交网站上有一个关于迁移 Spring Boot 迁移 Maven 至 Gradle 的帖子: 该贴子上也有很多人质疑:Maven 用的好好的,为什么要迁移至 Gradle? 虽然该贴子只是说 ...
- spring boot 本地maven手动添加pom.xml依赖
spring boot 本地maven手动添加pom.xml依赖 按照如下pom.xml配置,本地jar包可以正常使用,适用于maven仓库中没有的的jar包下载下来,手动添加依赖. <!-- ...
- JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统(附源码)
文章目录 JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统 一.系统介绍 二.开发步骤 三.系统展示 四.开发总结 五.数据库相关 ...
- Spring Boot 使用 Maven assembly 插件打包
文章目录 1 摘要 2 Maven 核心依赖与配置 2.1 pom.xml 配置 2.2 assembly 配置信息 3 启动与停止脚本 3.1 启动脚本 3.2 停止脚本 4 推荐参考资料 5 Gi ...
最新文章
- 贪心算法很简单:跳跃游戏
- Linux 初步笔记
- 【MySQL distinct的使用】如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中
- SAP Commerce web service 的扩展
- mysql的联表查询和去重复数据
- js 当前日期增加自然月
- GMQ钱包致力成为您数字资产安全的保护伞
- Java网络编程之服务端中的Socket
- 学号 20165329 《Java程序设计》第4周学习总结
- 1 在c语言中不正确的常量是 a0xf6,C语言第三章在线测试题目及答案
- 计算机二级职业生涯规划讲座心得,职业规划讲座心得体会-
- 速腾聚创三维激光雷达 实现cartographer 建图复现工作(代完成)
- 精准面试突击55:delete、drop、truncate有什么区别?
- php遍历数组查询数据库,php如何遍历数据库查询数组
- 联想ThinkPad声音扬声器正常但是不能发出声音,插入耳机有声音
- 磁力搜索网站+下载神器放送2019-03-05
- python并发编程书籍推荐_《吐血整理》-顶级程序员书单集
- 高级计算机网络 外文文献,计算机网络新技术外文文献翻译
- PW5328B的锂电池升压9V芯片方案,设计图
- hardmard积 用什么符号表示_复数域符号相乘的差分网络编码