Spring Boot Maven Plugin(一):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 最简单的结构
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.7.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
repaceage 最简单的结构
二、剔除不需要的依赖
这个例子重新打包了一个jar包或war包,这个jar包或war包被构建于maven生命周期的package阶段,包括定义在工程中的任何依赖(包括scope为provided)。如果有一些依赖模块需要被排除掉,可以使用一个exclude的选项。
默认情况下,repackage和run这两个maven目标会包括定义在工程中的任何依赖。一些依赖被要求从可执行jar包中排除。下面有三种方式可以在包运行时排除依赖模块。
方式1::排除一个具体的maven 模块,通过唯一的groupId和artifactId组合来实现。(如果有必要,可以加入classifier来唯一确认。)
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
<configuration>
<excludes>
<exclude>
<groupId>com.foo</groupId>
<artifactId>bar</artifactId>
</exclude>
</excludes>
</configuration>
...
</plugin>
...
</plugins>
...
</build>
...
</project>
排除一个具体的maven模块
方式2:排除和“指定的artifactId”相符的所有maven模块。
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
<configuration>
<excludeArtifactIds>my-lib,another-lib</excludeArtifactIds>
</configuration>
...
</plugin>
...
</plugins>
...
</build>
...
</project>
排除和指定的artifactId项目的所有maven模块
方式3:排除属于“指定的groupId”的所有maven模块。
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
<configuration>
<excludeGroupIds>com.foo</excludeGroupIds>
</configuration>
...
</plugin>
...
</plugins>
...
</build>
...
</project>
排除属于指定的groupId的所有maven模块
三、重写manifest
这个插件还可以重写项目的manifest (可运行jar包的MANIFEST.MF),特别是管理Main-Class和Start-Class启动类。如果默认的配置不能满足需求,我们可以在这里做配置。通过插件的layout属性可以确实地控制Main-Class。
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.7.RELEASE</version>
<configuration>
<mainClass>${start-class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
repackage mainClass
执行打包命令: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即可实现这个功能。具体如下:
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.7.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
...
</plugin>
...
</plugins>
...
</build>
...
</project>
repackage classifier
五、打包时排除resources下的资源文件
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.yml</exclude>
</excludes>
</resource>
</resources>
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
排除resources下的资源文件
喜欢请微信扫描下面二维码,关注我公众号--“精修Java”,做一些实战项目中的问题和解决方案分享。

Spring Boot Maven Plugin(一):repackage目标的更多相关文章
- Spring Boot Maven Plugin(二):run目标
简介 Spring Boot Maven Plugin插件提供spring boot在maven中的支持.允许你打包可运行的jar包或war包. 插件提供了几个maven目标和Spring Boot ...
- Spring Boot Maven Plugin打包异常及三种解决方法:Unable to find main class
[背景]spring-boot项目,打包成可执行jar,项目内有两个带有main方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在类都没 ...
- Spring Boot的Maven插件Spring Boot Maven plugin详解
Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Mave ...
- 微服务下 Spring Boot Maven 工程依赖关系管理
单体 Spring Boot Maven 工程 最基本的 pom.xml 包含工程信息.Spring Boot 父工程.属性配置.依赖包.构建插件 <?xml version="1.0 ...
- spring boot maven打包可运行jar包
普通打包之后在程序目录运行,或者编写bat运行时会提示“没有主清单属性”,这是因为并没有找到main()方法,需要我们指明告诉java程序 我bat中的代码 @echo off title mytit ...
- spring boot maven META-INF/MAINIFEST.MF
unzip -p charles.jar META-INF/MANIFEST.MF https://blog.csdn.net/isea533/article/details/50278205 htt ...
- Spring boot+ maven + thymeleaf + HTML 实现简单的web项目
第一步: 创建一个SpringBoot应用 第二步: 创建一个实体,用来存储数据,在src/main/java/com/example/first下创建包entity , 在entity下创建Pers ...
- 一步步搭建 Spring Boot maven 框架的工程
摘要:让Spring应用从配置到运行更加快速,演示DIY Spring Boot 框架时,如何配置端口号,如何添加日志. Spring Boot 框架帮助开发者更容易地创建基于Spring的应用程序和 ...
- Spring Boot Maven 打包 Jar
Maven pom.xml 必须包含 <packaging>jar</packaging> <build> <plugins> <plugin&g ...
随机推荐
- JMeter网站测试分析
WEB类型: User Driver:以用户量作为衡量系统性能的主要指标的系统,典型如IM系统.企业 内部业务系统: TPS-Driver:以tps作为衡量系统性能的主要指标的系统,典型的如消息系统 ...
- ios逆向过程中lldb调试技巧-po篇
假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在 ...
- jsp 的四个作用域 :page、request、session和application的区别 (转)
1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的整个过程.在这个过程中使用forward方式跳转多个jsp.在这些页面里你都可以 ...
- 【Centos7】安装memcached
1.Linux系统安装memcached,首先要先安装libevent库. 安装libevent库有两种方式 (1)rpm安装 yum install libevent libdeve (2)源码包安 ...
- 第二章 R语言数据结构
R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...
- AC Analysis
1.从Options---sheet properties—circuit—show all调出来节点编号 :
- 基本元件库(Basic)
- 第二章 [分布式CMS]
结构系统:定义的后台 资源云:存在静态资源文件 文档云:文章内容 工具服务:模板.,公共类 Web服务:处理一下数据交互 为什么要做分布式了? 说实话,我也不太清楚,网上说在性能方面比较好,我的理解是 ...
- Java基础---继承、抽象、接口
一.概述 继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单 ...
- js、JSP、servlet之间的传递小结
@ JS 与 JSP :JSP无法直接获取JS的值,只能通过隐藏表单或者dom节点设置. JSP中设置隐藏表单input,或者设置任意一个隐藏或者不隐藏的节点比如div, 而JS就通过document ...