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

启动服务

posted @ 2018-12-13 16:10  低调人生  阅读(2627)  评论(0编辑  收藏  举报