Maven的assembly插件实现自定义打包部署(包含依赖jar包)
微服务必备
优点:
1、可以直接导入依赖jar包
2、可以添加插件启动 .sh 文件
3、插件的配置以及微服务的统一打包方式
1.首先我们需要在pom.xml中配置maven的assembly插件
<build> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <classesDirectory>target/classes/</classesDirectory> <excludes> <exclude>**/*.properties</exclude> <exclude>**/*.xml</exclude> <exclude>**/*.txt</exclude> <exclude>**/*.list</exclude> </excludes> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> </configuration> </plugin> <!-- 重点配置这个 assembly --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2.1</version> <configuration> <descriptors> <descriptor>src/main/assembly.xml</descriptor> <!--配置描述文件路径--> </descriptors> </configuration> <executions> <execution> <!-- 配置执行器 --> <id>make-assembly</id> <phase>package</phase> <!-- 绑定到package生命周期阶段上 --> <goals> <goal>single</goal> <!-- 只运行一次 --> </goals> </execution> </executions> </plugin> </plugins> </build>
2.接着我们在src/main/assembly文件中配置assembly.xml文件
<?xml version="1.0" encoding="UTF-8"?> <assembly> <id>bin</id> <formats> <format>zip</format> <!--打包的文件格式,也可以有:war zip tar.gz--> </formats> <dependencySets> <dependencySet> <useProjectArtifact>true</useProjectArtifact> <!-- zip 压缩包下是否生成和项目名相同的根目录--> <outputDirectory>lib</outputDirectory> <!-- 依赖目录添加 生成的lib文件夹下放该项目的所有依赖以及该服务jar包 --> </dependencySet> </dependencySets> <fileSets> <fileSet> <directory>src/main/scripts</directory> <!-- 脚本文件用来开启和关闭该服务,打包后直接放到根目录下 server.sh 脚本 --> <outputDirectory>/</outputDirectory> <includes> <include>*</include> </includes> </fileSet> <fileSet> <directory>src/main/resource</directory> <outputDirectory>/conf</outputDirectory> <includes> <include>*</include> </includes> </fileSet> </fileSets> </assembly>
其中,生成的lib文件夹下放该项目的所有依赖以及该服务jar包,src/main/bin文件夹下我们一般放个脚本文件用来开启和关闭该服务,打包后直接放到根目录下。生成的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. 打包目录结构
maven打包时候,我们发现目录下多了个.zip文件,这个文件则是我们部署项目需要的
.zip文件下则有一个启动脚本、lib依赖jar包,conf配置文件
4.打包方式思考
我们通过这种方式,每个微服务就是一个以服务名称命名的zip文件,解压后里面lib目录下是该服务生成的可执行jar包以及它所有的依赖jar包,我们直接运行根目录下server.sh脚本文件来进行服务的开启和关闭。风格统一,简单明了!
启动服务