1. 程式人生 > >Maven的assembly外掛實現自定義打包部署(包含依賴jar包)

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指令碼檔案來進行服務的開啟和關閉。風格統一,簡單明瞭!

啟動服務