目录

  • 1、spring-boot-maven-plugin
  • 2、maven-assembly-plugin
  • 3、maven-assembly-plugin打包后的可执行文件缺失lib问题

1、spring-boot-maven-plugin

springboot默认打包工具为spring-boot-maven-plugin

pom配置:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.gsafety.bg.enterprise.EnterpriseApplication</mainClass><layout>ZIP</layout><!-- 打增量包时需要includes部分, 要打全量包删除includes --><includes><include><groupId>com.gsafety.bg</groupId><artifactId>enterprise-controller</artifactId></include><include><groupId>com.gsafety.bg</groupId><artifactId>enterprise-service</artifactId></include><include><groupId>com.gsafety.bg</groupId><artifactId>enterprise-dao</artifactId></include></includes></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions>
</plugin>

打包后的目录结构:

BOOT-INF内包含目录:lib(enterprise-service-1.0.0.jar、enterprise-dao-1.0.0.jar、enterprise-controller-1.0.0.jar)、classes、classpath.idx

2、maven-assembly-plugin

maven-assembly-plugin 插件的主要作用是允许用户将项目输出与它的依赖项、模块、站点文档、和其他文件一起组装成一个可分发的归档文件,简单的说,就是自定义打包的工具,有自己的配置文件(Assembly描述符文件)。微服务使用这个插件的概率比较高,平时普通的项目不需要这样的实现方式。

pom配置:

<plugin><artifactId>maven-assembly-plugin</artifactId><version>2.4.1</version><configuration><finalName>enterprise</finalName><encoding>utf-8</encoding><descriptors><descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions>
</plugin>

assembly.xml

全部可设置节点可参考官网:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

<assembly><id>1.0</id><formats><format>tar.gz</format></formats><includeBaseDirectory>true</includeBaseDirectory><!--    项目所需lib包--><!--    <dependencySets>--><!--        &lt;!&ndash;把依赖都打包进libs文件夹&ndash;&gt;--><!--        <dependencySet>--><!--            <useProjectArtifact>true</useProjectArtifact>--><!--            <outputDirectory>libs</outputDirectory>--><!--            <scope>runtime</scope>--><!--        </dependencySet>--><!--    </dependencySets>--><fileSets><!--打包启动文件到deploy目录--><fileSet><!--需要打包的文件所在目录 即start.sh--><directory>src/main/assembly/bin</directory><!--要打包到的地址--><outputDirectory>deploy</outputDirectory><!--linux权限--><fileMode>0755</fileMode></fileSet><!--打包可执行jar到application-server目录--><fileSet><directory>target</directory><outputDirectory>application-server</outputDirectory><includes><include>*.jar</include></includes></fileSet><!--打包src/main/resources到logs/enterprise目录--><fileSet><directory>src/main/resources</directory><outputDirectory>logs/enterprise</outputDirectory><fileMode>0755</fileMode><!--打包不包含src/main/resources所有文件,即生成logs/enterprise空目录--><excludes><exclude>**/*</exclude></excludes></fileSet></fileSets>
</assembly>

打包后的目录结构:

查看application-server文件夹内可执行文件解压目录:

发现与spring-boot-maven-plugin打包后的目录不一致,明显缺少lib内的三个jar和其他一些文件

3、maven-assembly-plugin打包后的可执行文件缺失lib问题

修改pom文件:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.gsafety.bg.enterprise.EnterpriseApplication</mainClass><layout>ZIP</layout><!-- 打增量包时需要includes部分, 要打全量包删除includes --><includes><include><groupId>com.gsafety.bg</groupId><artifactId>enterprise-controller</artifactId></include><include><groupId>com.gsafety.bg</groupId><artifactId>enterprise-service</artifactId></include><include><groupId>com.gsafety.bg</groupId><artifactId>enterprise-dao</artifactId></include></includes></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!-- 生成项目依赖到lib本地,并设置需要排除的jar--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>prepare-package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>../../../lib</outputDirectory><!-- 需要排除的jar的 groupId --><excludeArtifactIds>enterprise-controller,enterprise-service,enterprise-dao</excludeArtifactIds></configuration></execution></executions></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.4.1</version><configuration><finalName>enterprise</finalName><encoding>utf-8</encoding><descriptors><descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>

即plugins先引用spring-boot-maven-plugin 后引用maven-assembly-plugin,这样spring-boot-maven-plugin会将enterprise-service-1.0.0.jar、enterprise-dao-1.0.0.jar、enterprise-controller-1.0.0.jar三个jar打包到lib中,打包后maven-assembly-plugin就会将其打包进enterprise-1.0.tar.gz。

这样enterprise-1.0.tar.gz内就包含了启动文件(deploy)、可执行文件(application-server/enterprise-main-1.0.0.jar)、日志目录(logs/enterprise),符合目前项目部署的目录结构。

SpringCloud maven-assembly-plugin 多级目录打包相关推荐

  1. 使用Maven Assembly plugin将依赖打包进jar

    一个Eclipse的工程,在pom中配置了若干依赖,需要将pom中所有的依赖全部打包进一个jar包中,可以选择的方案有maven-assembly-plugin和fatjar.以前采用fatjar进行 ...

  2. Maven Assembly Plugin - 如何将Maven工程打成一个可执行jar包

    参考自: http://blog.csdn.net/symgdwyh/article/details/6081532 Maven Assembly Plugin http://maven.apache ...

  3. assembly plugin实现自定义打包

    http://skydream.iteye.com/blog/437937 在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了实现自己需要的打包格式而使用maven ant task以ma ...

  4. maven assembly plugin使用

    使用场景 在使用maven来管理项目时,项目除了web项目,还有可能为控制台程序,一般用于开发一些后台服务的程序.最近在工作中也遇到了这种场景,使用quartz开发一个任务调度程序.程序中依赖很多ja ...

  5. Maven自定义打包插件Assembly Plugin简单使用

    使用Assembly Plugin实现自定义打包 1.修改pom.xml <!-- 编译时自动打包,规则见distribution.xml文件--> <build><pl ...

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

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

  7. maven assembly打包插件详解

    定义 来自官方的定义: Maven Assembly Plugin relies on the provided assembly descriptors to dictate its executi ...

  8. Maven Assembly插件介绍

    你是否想要创建一个包含脚本.配置文件以及所有运行时所依赖的元素(jar)Assembly插件能帮你构建一个完整的发布包. Assembly插件会生成 "assemblies", 此 ...

  9. Maven assembly简谈

    什么是Assembly? "assembly"是把一组文件.目录.依赖元素组装成一个归档文件. 比如, 假设一个 Maven project定义了一个JAR artifact,它包 ...

最新文章

  1. ubuntu mysql 驱动_怎么在Ubuntu下为MySQL添加ODBC驱动?
  2. 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题...
  3. 桌面图标摆放图案_用图标制作醒目的图案
  4. 在业务层实现记录请求日志
  5. fastapi 传输文件存文件_python3 FastAPI框架入门 基本使用, 模版渲染, 数据交互,cookie使用, 上传文件, 静态文件配置...
  6. linux mariadb 乱码,MariaDB插入中文数据乱码解决过程
  7. Day9-HTML body属性
  8. php涉及数据库操作时响应很慢。
  9. 力扣-876 链表的中间结点
  10. 搭建 Hexo Blog
  11. mmdetection的使用
  12. 如何使用monitor(DDMS)抓取traceview文件
  13. 公路养护工证含金量高吗?在哪报考?
  14. DNS服务器安装(linux)
  15. Office 2016出现加载DLL失败或者库未注册的问题:0x8002801D或者0x80029C4A
  16. mysql精度_MySQL几种数据类型精度和标度的情况
  17. 分治法的思想与经典题目
  18. qwebkit的套壳开发
  19. 【贪玩巴斯】关于修改系统hosts文件提升网络访问速度以便于提高抢课几率(好文分享)//2021-2-10
  20. Discuz 的加密与解密函数authcode

热门文章

  1. 垃圾《Essential C++》
  2. Ubuntu系统查看硬件温度
  3. 基于树莓派和YS-LDV7语音识别模块实现声控灯
  4. 解决springboot中Map集合key中不能使用英文小数点问题
  5. 集合 Transformer(Set Transformer)
  6. 笔记本电脑连不上waifi怎么办
  7. 【软件工程导论】知识点汇总 | 适用于考试复习 | 轻松通过考试
  8. 直流偏置的matlab代码,三端口隔离DC-DC变换器的暂态直流偏置机理及抑制策略
  9. sqlserver取模_SQLSERVER教程
  10. (兼容正点原子引脚)OV7670 FIFO 30W摄像头介绍(一) --- 整体介绍/SCCB时序