一、背景

  最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有木有。本文分享该插件的配置以及微服务的统一打包方式。

二、配置步骤及其他事项

1.首先我们需要在pom.xml中配置maven的assembly插件

 <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<!--运行jar包时运行的主类,要求类全名-->
<mainClass>com.hafiz.Runner</mainClass>
<!-- 是否指定项目classpath下的依赖 -->
<addClasspath>true</addClasspath>
<!-- 指定依赖的时候声明前缀 -->
<classpathPrefix>./</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution><!-- 配置执行器 -->
<id>make-assembly</id>
<phase>package</phase><!-- 绑定到package生命周期阶段上 -->
<goals>
<goal>single</goal><!-- 只运行一次 -->   
</goals>
<configuration>
<finalName>${project.name}</finalName>
<descriptor>src/main/assembly/assembly.xml</descriptor><!--配置描述文件路径--> 
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

2.接着我们在src/main/assembly文件中配置assembly.xml文件

 <assembly>
<id></id>
<formats>
<format>tar.gz</format><!--打包的文件格式,也可以有:war zip-->
</formats>
<!--tar.gz压缩包下是否生成和项目名相同的根目录-->
<includeBaseDirectory>true</includeBaseDirectory>
<dependencySets>
<dependencySet>
<!--是否把本项目添加到依赖文件夹下-->
<useProjectArtifact>true</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
<!--将scope为runtime的依赖包打包-->
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</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插件实现自定义打包的更多相关文章

  1. Maven的assembly插件实现自定义打包部署(包含依赖jar包)

    微服务必备 优点: 1.可以直接导入依赖jar包 2.可以添加插件启动 .sh 文件 3.插件的配置以及微服务的统一打包方式 1.首先我们需要在pom.xml中配置maven的assembly插件 & ...

  2. 【Maven实战技巧】「插件使用专题」Maven-Assembly插件实现自定义打包

    前提概要 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有 ...

  3. Maven assembly插件进行自定义构建

    众所周知,Maven是一个约定优于配置的java构建工具,通常我们只需要定义非常少的内容,就可以根据package标签属性来构建生成的jar, war包的相关内容. 如果想要对maven中依赖的内容一 ...

  4. Maven的assembly插件在linux启动卡住Starting the localhost.localdomain

    1.今天在测试assembly的时候,在Linux虚拟机,内存配置为512mb,然后开始在Linux上运行assembly的时候就会一直卡住  2.停止运行后,查看了下日志 [root@localho ...

  5. maven之assembly插件

    传送门 https://blog.csdn.net/WANGYAN9110/article/details/38646677/ http://blueram.iteye.com/blog/168407 ...

  6. java工程打成jar包 - 使用maven assembly插件打包及手动打包

    在java工程打包的过程中遇到过不少问题,现在总结一下.一种是典型的maven工程打包,依赖的jar包全都在pom.xml中指定,这种方式打包很方便:另一种是依赖了本机jar包(不能通过pom.xml ...

  7. maven--插件篇(assembly插件)

    maven-assembly可以通过dependencySets将依赖的jar包打到特定目录. 1. 简介 简单的说,maven-assembly-plugin 就是用来帮助打包用的,比如说打出一个什 ...

  8. Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解

    Assembly插件会生成 "assemblies", 此特性等同于的Maven 1 distribution plug-in..该插件不仅支持创建二进制归档文件,也支持创建源码归 ...

  9. maven-使用assembly自定义打包

    用maven管理项目引用依赖很方便,但是打包的时候如果是web包还好,会直接把依赖的jar包打到lib目录中,如果是jar包的话,依赖默认是不打入进去的 这样如果运行环境中没有依赖的jar包,就麻烦了 ...

随机推荐

  1. 关于crontab命令

    crontab命令 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供 ...

  2. indexer.go

    package) ; , ].DocId,:],)) :],) :], , ] ; ];]--],]) , ) )) )-b+b*d/avgDocLength)) , ;].locations[ind ...

  3. BZOJ_2661_[BeiJing wc2012]连连看_费用流

    BZOJ_2661_[BeiJing wc2012]连连看_费用流 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规 ...

  4. ZOJ_2314_Reactor Cooling_有上下界可行流模板

    ZOJ_2314_Reactor Cooling_有上下界可行流模板 The terrorist group leaded by a well known international terroris ...

  5. BZOJ_4128_Matrix_矩阵乘法+哈希+BSGS

    BZOJ_4128_Matrix_矩阵乘法+哈希+BSGS Description 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) Input 第一行两个整数n和p,表示矩阵的 ...

  6. KVM虚拟化环境准备

    1. 概述2. 环境准备2.1 硬件环境2.2 软件环境2.2.1 YUM安装软件包2.2.2 环境检查2.2.3 启动libvirtd服务2.3 网络环境2.3.1 复制网卡配置文件2.3.2 修改 ...

  7. 【源码安装】Heartbeat3.0.9

    1.概述1.1 关于Heartbeat1.2 本篇博客实践环境2. 部署基础环境2.1 通过YUM安装依赖环境2.2 创建Heartbeat用户和组3. 编译安装3.1下载源码包3.2 编译安装3.2 ...

  8. JDBC知识详解

    一.相关概念 1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它 ...

  9. 利用face_recognition库裁取人脸

    from PIL import Image import face_recognition # Load the jpg file into a numpy array image = face_re ...

  10. Nginx+Keepalived 集群方案

    1.Keepalived高可用软件 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此,kee ...