使用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两个脚本文件来进行服务的开启和关闭。风格统一,简单明了!

三、总结

  随着微服务的越来越火,我们将服务进行细粒度拆分后,也需要很好的把服务的打包以及部署方式进行统一,这样我们就可以走自动化发布工具来进行统一服务的管理和部署,使得越来越方便。

原文地址:https://www.cnblogs.com/xc1234/p/9186186.html

时间: 2024-10-12 15:53:36

使用Maven的assembly插件实现自定义打包的相关文章

Java技术--maven的assembly插件打包(依赖包归档)

注:最近工作中遇到的一个问题,写了一个日志处理的模块,现在需要给第三方客户使用,但是该模块依赖了我们自己写的或者修改的一些jar包,可选择方案:1.所有jar包放在一个文件夹中给第三方(感觉好不专业):2.将日志处理模块和依赖包全部打成一个jar包,明显这种方法专业且方便.因此引入maven的assembly插件来完成这个工作. 前提是:你的项目也是用maven来管理的. 1.在pom.xml文件中增加assembly插件: <!-- for package --> <plugin>

Maven 的assembly插件使用

Maven 的assembly插件使用: 最近在做一个小工程,利用java启动运行. 为了简单方便使用运行,利用maven的assembly将需要使用的jar都打包到一个jar中.这样无论拷贝到哪里,只有运行就可以,不用需要任何配置. 配置时指定mainClass,运行java的main函数时则可以不用指定包含main函数的类路径名.如运行下面的jar文件则非常简单方便(后台运行):nohup java -jar CalculateScore.jar & 第一步:需要在pom的xml中配置如下内

maven使用assembly插件打zip包

一,pom引入插件 <build> <plugins> <!-- 使用assembly插件打成zip --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-5</version> <config

maven--插件篇(assembly插件)

maven-assembly可以通过dependencySets将依赖的jar包打到特定目录. 1. 简介 简单的说,maven-assembly-plugin 就是用来帮助打包用的,比如说打出一个什么类型的包,包里包括哪些内容等等. 2. 常见的maven插件 maven插件是在生命周期中某些阶段执行的任务.一个插件完成一项功能.以下介绍几种常见的插件.如对于打包来说,有多种插件选择.最常见的有以下3个: plugin function maven-jar-plugin maven 默认打包插

Maven Assembly插件介

你是否想要创建一个包含脚本.配置文件以及所有运行时所依赖的元素(jar)Assembly插件能帮你构建一个完整的发布包. Assembly插件会生成 "assemblies", 此特性等同于的Maven 1 distribution plug-in..该插件不仅支持创建二进制归档文件,也支持创建源码归档文件.这些assemblies定义在一个assembly描述符文件里.你可以选择自定义assembly描述符或者直接使用插件自带的三个预定义描述符中的任何一个. 目前Assembly插件

sbt的assembly插件使用(打包所有依赖)

1.sbt是什么 对于sbt 我也是小白, 为了搞spark看了一下scala,学习scala时指定的构建工具就是sbt(因为sbt也是用scala开发的嘛),起初在我眼里就是一个maven(虽然maven我也没怎么用),后面构建2个项目之后,发现还是蛮强大的,就是学习成本有点高. 哎,但是现在什么东东没有学习成本呢.扯远了,0.13版本的入门之旅参考:http://www.scala-sbt.org/0.13/tutorial/zh-cn/index.html 2.assembly是sbt的一

Intell 使用 assembly插件 打包可执行Iar包

1.在pom.xml文件中增加assembly插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <executions> <execution> <i

maven配置tomcat插件,及在maven打包时文件名不包含版本号

maven配置tomcat插件,及在maven打包时文件名不包含版本号 <build> <!-- 指定文件名,在打包时文件名不包含版本号 --> <finalName>${project.artifactId}</finalName> <plugins> <!-- 资源文件拷贝插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> &l

maven的jetty插件提示No Transaction manager found导致启动慢的解决方法

本文出处:http://blog.csdn.net/chaijunkun/article/details/37923905,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文.在使用maven开发web项目极大地方便了jar包的依赖,在测试时也可以集成Servlet容器,从启动速度和量级上看,Jetty无疑是不二选择,然而从8.x开始,如果你的web项目中不包含数据库访问(或者说没有事务管理器)的话,在其启动时会提示找不到事务管理器,输出信息如下: o