使用Maven的assembly插件实现自定义打包
一、背景
最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有木有。本文分享该插件的配置以及微服务的统一打包方式。
二、配置步骤及其他事项
1.首先我们需要在pom.xml中配置maven的assembly插件
1 <build> 2 <plugins> 3 <plugin> 4 <groupId>org.apache.maven.plugins</groupId> 5 <artifactId>maven-jar-plugin</artifactId> 6 <version>2.3.1</version> 7 <configuration> 8 <archive> 9 <manifest> 10 <!--运行jar包时运行的主类,要求类全名--> 11 <mainClass>com.hafiz.Runner</mainClass> 12 <!-- 是否指定项目classpath下的依赖 --> 13 <addClasspath>true</addClasspath> 14 <!-- 指定依赖的时候声明前缀 --> 15 <classpathPrefix>./</classpathPrefix> 16 </manifest> 17 </archive> 18 </configuration> 19 </plugin> 20 <plugin> 21 <groupId>org.apache.maven.plugins</groupId> 22 <artifactId>maven-assembly-plugin</artifactId> 23 <executions> 24 <execution><!-- 配置执行器 --> 25 <id>make-assembly</id> 26 <phase>package</phase><!-- 绑定到package生命周期阶段上 --> 27 <goals> 28 <goal>single</goal><!-- 只运行一次 --> 29 </goals> 30 <configuration> 31 <finalName>${project.name}</finalName> 32 <descriptor>src/main/assembly/assembly.xml</descriptor><!--配置描述文件路径--> 33 </configuration> 34 </execution> 35 </executions> 36 </plugin> 37 </plugins> 38 </build>
2.接着我们在src/main/assembly文件中配置assembly.xml文件
1 <assembly> 2 <id></id> 3 <formats> 4 <format>tar.gz</format><!--打包的文件格式,也可以有:war zip--> 5 </formats> 6 <!--tar.gz压缩包下是否生成和项目名相同的根目录--> 7 <includeBaseDirectory>true</includeBaseDirectory> 8 <dependencySets> 9 <dependencySet> 10 <!--是否把本项目添加到依赖文件夹下--> 11 <useProjectArtifact>true</useProjectArtifact> 12 <outputDirectory>lib</outputDirectory> 13 <!--将scope为runtime的依赖包打包--> 14 <scope>runtime</scope> 15 </dependencySet> 16 </dependencySets> 17 <fileSets> 18 <fileSet> 19 <directory>src/main/bin</directory> 20 <outputDirectory>/</outputDirectory> 21 </fileSet> 22 </fileSets> 23 </assembly>
其中,生成的lib文件夹下放该项目的所有依赖以及该服务jar包,src/main/bin文件夹下我们一般放start.sh和stop.sh两个脚本文件用来开启和关闭该服务,打包后直接放到根目录下。生成的tar.gz文件的名字为:maven-assembly-plugin插件中配置的finalName-assembly.xml配置的id(若assembly中没有指定id,则只有前半部分).
assembly的具体语法,请参见官网:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
这里面涉及到如何生成可执行的jar包,具体参见:用Maven快速生成带有依赖的可执行jar包
3.项目目录结构
其中红色方框内就是通过assembly插件是生成的tar.gz文件,解压后里面的结构如下:
其中lib目录下是本项目生成的可执行jar包以及它的所有依赖jar包。若assembly插件中配置<useProjectArtifact>为false,则不会生成assembly-demo文件夹,直接就是lib文件夹以及两个脚本文件。
代码Github地址:https://github.com/hafizzhang/assembly-demo.git
4.打包方式思考
我们通过这种方式,每个微服务就是一个以服务名称命名的tar.gz文件,解压后里面lib目录下是该服务生成的可执行jar包以及它所有的依赖jar包,我们直接运行根目录下start.sh和stop.sh两个脚本文件来进行服务的开启和关闭。风格统一,简单明了!
三、总结
随着微服务的越来越火,我们将服务进行细粒度拆分后,也需要很好的把服务的打包以及部署方式进行统一,这样我们就可以走自动化发布工具来进行统一服务的管理和部署,使得越来越方便。
使用Maven的assembly插件实现自定义打包相关推荐
- java assembly 打包_使用Maven的assembly插件实现自定义打包
一.背景 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有 ...
- maven使用assembly插件打包,剥离配置文件,加入可执行的脚本用来启动应用
通过使用maven的assembly插件,可以按照我们自定义的要求生成包,比如将配置文件剥离到独立的目录中,加入sh,bat脚本以便在Linux或Windows上通过执行脚本来启动项目. 首先,在项目 ...
- Java技术--maven的assembly插件打包(依赖包归档)
注:最近工作中遇到的一个问题,写了一个日志处理的模块,现在需要给第三方客户使用,但是该模块依赖了我们自己写的或者修改的一些jar包,可选择方案:1.所有jar包放在一个文件夹中给第三方(感觉好不专业) ...
- java assembly_Java技术--maven的assembly插件打包(依赖包归档)
注:最近工作中遇到的一个问题,写了一个日志处理的模块,现在需要给第三方客户使用,但是该模块依赖了我们自己写的或者修改的一些jar包,可选择方案:1.所有jar包放在一个文件夹中给第三方(感觉好不专业) ...
- Maven 的assembly插件使用
Maven 的assembly插件使用: 最近在做一个小工程,利用java启动运行. 为了简单方便使用运行,利用maven的assembly将需要使用的jar都打包到一个jar中.这样无论拷贝到哪里, ...
- assembly plugin实现自定义打包
http://skydream.iteye.com/blog/437937 在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了实现自己需要的打包格式而使用maven ant task以ma ...
- Maven自定义打包插件Assembly Plugin简单使用
使用Assembly Plugin实现自定义打包 1.修改pom.xml <!-- 编译时自动打包,规则见distribution.xml文件--> <build><pl ...
- java工程打成jar包 - 使用maven assembly插件打包及手动打包
在java工程打包的过程中遇到过不少问题,现在总结一下.一种是典型的maven工程打包,依赖的jar包全都在pom.xml中指定,这种方式打包很方便:另一种是依赖了本机jar包(不能通过pom.xml ...
- Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解
Assembly插件会生成 "assemblies", 此特性等同于的Maven 1 distribution plug-in..该插件不仅支持创建二进制归档文件,也支持创建源码归 ...
最新文章
- 2018 年最引人注目的科学时刻,《科学》杂志选出14 张年度最佳科学照片
- Linux Xmanager
- nginx服务器远程无法访问,客户端连接Nginx偶尔提示无法连接到远程服务器
- python是烂语言吗
- Excel-数据分列的多种方法实现
- jQuery的进行解决layui闪退的问题
- ExtJs4学习(七)MVC中的Store
- 2019一级计算机等级考试试题,2019年全国计算机等级考试一级练习试题及答案(一)...
- 养老金上涨后,退休老人每个月6500元的养老金,属于什么水平?
- c语言注释部分两侧的分界符号分别是,C语言习题及解答.doc
- java计算机毕业设计服装连锁店后台管理系统MyBatis+系统+LW文档+源码+调试部署
- JavaWeb学习方法
- Comsol Multiphysics安装步骤详解
- poj 1840(数的hah)
- 167. 两数之和 II - 输入有序数组(java)
- 微型计算机能直接识别并执行的语言,微处理器能直接识别并执行的命令语言称为...
- android中流媒体
- 克罗内克积(Kronecker product)与笛卡尔乘积(Cartesian product)
- 04夯实基础之MySQL基础
- C语言 system函数