简介

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

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

  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目标的更多相关文章

  1. Spring Boot Maven Plugin(二):run目标

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

  2. Spring Boot Maven Plugin打包异常及三种解决方法:Unable to find main class

    [背景]spring-boot项目,打包成可执行jar,项目内有两个带有main方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在类都没 ...

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

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

  4. 微服务下 Spring Boot Maven 工程依赖关系管理

    单体 Spring Boot Maven 工程 最基本的 pom.xml 包含工程信息.Spring Boot 父工程.属性配置.依赖包.构建插件 <?xml version="1.0 ...

  5. spring boot maven打包可运行jar包

    普通打包之后在程序目录运行,或者编写bat运行时会提示“没有主清单属性”,这是因为并没有找到main()方法,需要我们指明告诉java程序 我bat中的代码 @echo off title mytit ...

  6. spring boot maven META-INF/MAINIFEST.MF

    unzip -p charles.jar META-INF/MANIFEST.MF https://blog.csdn.net/isea533/article/details/50278205 htt ...

  7. Spring boot+ maven + thymeleaf + HTML 实现简单的web项目

    第一步: 创建一个SpringBoot应用 第二步: 创建一个实体,用来存储数据,在src/main/java/com/example/first下创建包entity , 在entity下创建Pers ...

  8. 一步步搭建 Spring Boot maven 框架的工程

    摘要:让Spring应用从配置到运行更加快速,演示DIY Spring Boot 框架时,如何配置端口号,如何添加日志. Spring Boot 框架帮助开发者更容易地创建基于Spring的应用程序和 ...

  9. Spring Boot Maven 打包 Jar

    Maven pom.xml 必须包含 <packaging>jar</packaging> <build> <plugins> <plugin&g ...

随机推荐

  1. JMeter网站测试分析

     WEB类型: User Driver:以用户量作为衡量系统性能的主要指标的系统,典型如IM系统.企业 内部业务系统: TPS-Driver:以tps作为衡量系统性能的主要指标的系统,典型的如消息系统 ...

  2. ios逆向过程中lldb调试技巧-po篇

    假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如你正在 ...

  3. jsp 的四个作用域 :page、request、session和application的区别 (转)

    1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的整个过程.在这个过程中使用forward方式跳转多个jsp.在这些页面里你都可以 ...

  4. 【Centos7】安装memcached

    1.Linux系统安装memcached,首先要先安装libevent库. 安装libevent库有两种方式 (1)rpm安装 yum install libevent libdeve (2)源码包安 ...

  5. 第二章 R语言数据结构

    R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...

  6. AC Analysis

    1.从Options---sheet properties—circuit—show all调出来节点编号 :

  7. 基本元件库(Basic)

  8. 第二章 [分布式CMS]

    结构系统:定义的后台 资源云:存在静态资源文件 文档云:文章内容 工具服务:模板.,公共类 Web服务:处理一下数据交互 为什么要做分布式了? 说实话,我也不太清楚,网上说在性能方面比较好,我的理解是 ...

  9. Java基础---继承、抽象、接口

    一.概述         继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单 ...

  10. js、JSP、servlet之间的传递小结

    @ JS 与 JSP :JSP无法直接获取JS的值,只能通过隐藏表单或者dom节点设置. JSP中设置隐藏表单input,或者设置任意一个隐藏或者不隐藏的节点比如div, 而JS就通过document ...