成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入探討Maven打包:打造精致的Zip包

開發(fā) 前端
當我們執(zhí)行 mvn package 命令進行打包時,Maven 會按照配置文件 package.xml 和插件的配置來生成最終的分發(fā)包。Maven Assembly Plugin 會根據(jù)配置文件定義的規(guī)則將項目的相關(guān)文件、依賴庫等內(nèi)容打包成指定的格式,并完成最終的分發(fā)包構(gòu)建。

在部署Spring Boot生產(chǎn)項目時,首先需要使用Maven將其打包成一個JAR文件或者包含JAR文件的ZIP文件。隨后,通過堡壘機將打包好的文件上傳至服務器進行部署,或構(gòu)建成Docker鏡像進行發(fā)布。在這一過程中,我們需要將項目中的配置文件或靜態(tài)資源放置在JAR包之外,這樣在修改配置文件或靜態(tài)資源時就無需重新打包。為了構(gòu)建ZIP文件,我們使用了Maven Assembly Plugin插件,該插件用于創(chuàng)建項目分發(fā)包,通過一個XML描述文件定義打包內(nèi)容。本文將詳細介紹這一流程。

maven-assembly-plugin簡介

maven-assembly-plugin 是一個 Maven 插件,用于創(chuàng)建項目分發(fā)包。該插件可以幫助將項目的構(gòu)建輸出、依賴庫等資源打包成一個歸檔文件,如 JAR、ZIP、TAR 等,方便項目的部署和發(fā)布。

以下是 maven-assembly-plugin 的一些主要特點和用途:

  • 靈活的配置:通過配置插件,可以定義不同的打包方式和內(nèi)容,滿足各種項目的需求。可以選擇包含依賴庫、特定文件、目錄結(jié)構(gòu)等。
  • 多種打包格式:支持生成不同格式的歸檔文件,如 JAR 包含所有依賴、ZIP 壓縮文件、TAR 文件等,可以根據(jù)實際情況選擇合適的打包格式。
  • 自定義描述符:除了預定義的描述符外,還可以編寫自定義描述符文件,以更精細的方式控制打包過程,定義需要包含的文件、目錄結(jié)構(gòu)等。
  • 插件執(zhí)行階段:通常在 Maven 構(gòu)建的某個階段(如 package 階段)觸發(fā)執(zhí)行,生成所需的分發(fā)包。
  • 簡化部署流程:打包成歸檔文件后,可以方便地進行部署和發(fā)布,簡化了項目的交付流程。

maven-assembly-plugin 配置

讓我們來看一下 Maven Assembly Plugin 的配置文件 package.xml,這個文件定義了項目打包的內(nèi)容和形式。在這個 XML 文件中,我們定義了項目打包的格式為 zip 和 dir,同時指定了一些文件和目錄的打包規(guī)則。

package.xml

<?xml versinotallow="1.0" encoding="UTF-8"?>
<assembly
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
 <!--項目打包統(tǒng)一文件 -->
 <id>package</id>
 <formats>
  <format>zip</format>
    <format>dir</format>
 </formats>
 <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <scope>runtime</scope>
            <excludes>
                <exclude>${groupId}:${artifactId}</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
 <fileSets>
  <!-- 啟動腳本文件打包 -->
  <fileSet>
   <directory>bin/</directory>
   <outputDirectory>./</outputDirectory>
            <includes>
                <include>*.sh</include>
            </includes>
   <fileMode>0755</fileMode>
   <lineEnding>unix</lineEnding>
  </fileSet>
  <!--資源文件打包 -->
  <fileSet>
   <directory>src/main/resources</directory>
   <outputDirectory>./</outputDirectory>
  </fileSet>
  <!-- 啟動jar文件打包 -->
  <fileSet>
   <directory>${project.build.directory}</directory>
   <outputDirectory>./</outputDirectory>
   <includes>
    <include>*.jar</include>
   </includes>
  </fileSet>
 </fileSets>
</assembly>

在 package.xml 中,我們還可以定義需要打包的依賴庫、啟動腳本文件、靜態(tài)資源文件以及啟動 jar 文件等內(nèi)容。也可以在通過來排除一些我們不需要的資源, 通過這個 XML 文件,我們可以靈活地配置項目打包的內(nèi)容和結(jié)構(gòu)。

Maven Build 配置

在項目的POM文件中,我們還需要引入maven-assembly-plugin插件,并指定其配置文件。由于我們需要將配置文件和靜態(tài)資源放置在JAR包之外,因此在打包過程中需要排除這些文件。Maven的配置示例如下:

<build>
  <!--<finalName>${project.artifactId}-${project.version}</finalName>-->
  <sourceDirectory>src/main/java</sourceDirectory>
  <resources>
   <resource>
    <directory>${project.basedir}/src/main/resources</directory>
    <filtering>true</filtering>
    <excludes>
     <exclude>*</exclude>
    </excludes>
   </resource>
   <resource>
    <directory>${project.basedir}/src/main/resources</directory>
    <filtering>true</filtering>
   </resource>
  </resources>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
     <encoding>UTF-8</encoding>
     <nonFilteredFileExtensions>
      <nonFilteredFileExtension>xls</nonFilteredFileExtension>
      <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
      <nonFilteredFileExtension>csv</nonFilteredFileExtension>
     </nonFilteredFileExtensions>
    </configuration>
   </plugin>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
     <archive>
      <!-- 添加index則不從mainfest中讀取classpath,而是從Index.list中讀取
                        <index>true</index> -->
      <manifest>
       <mainClass>cn.xj.snowflake.SnowflakeApplication</mainClass>
       <addClasspath>true</addClasspath>
       <classpathPrefix>lib/</classpathPrefix>
       <packageName>${project.artifactId}-${project.version}</packageName>
      </manifest>
     </archive>
     <excludes>
      <exclude>config/**</exclude>
      <exclude>mapper/**</exclude>
      <exclude>mybatis/**</exclude>
      <exclude>static/**</exclude>
      <exclude>templates/**</exclude>
      <exclude>i18n/**</exclude>
      <exclude>lib/**</exclude>
      <exclude>vm/**</exclude>
      <exclude>*.txt</exclude>
      <exclude>*.xml</exclude>
      <exclude>*.properties</exclude>
      <exclude>*.yml</exclude>
      <exclude>*.properties</exclude>
     </excludes>
    </configuration>
   </plugin>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
     <execution>
      <id>copy</id>
      <phase>compile</phase>
      <goals>
       <goal>copy-dependencies</goal>
      </goals>
      <configuration>
       <outputDirectory>${project.build.directory}/lib</outputDirectory>
       <overWriteReleases>false</overWriteReleases>
       <overWriteSnapshots>false</overWriteSnapshots>
       <overWriteIfNewer>true</overWriteIfNewer>
       <includeScope>compile</includeScope>
      </configuration>
     </execution>
    </executions>
   </plugin>
   <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
     <appendAssemblyId>false</appendAssemblyId>
     <descriptors>
      <descriptor>conf/package.xml</descriptor>
     </descriptors>
    </configuration>
    <executions>
     <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
       <goal>single</goal>
      </goals>
     </execution>
    </executions>
   </plugin>
  </plugins>
 </build>

在 Maven Build 的配置中,我們引入了 maven-resources-plugin、maven-jar-plugin、maven-dependency-plugin 和 maven-assembly-plugin 這幾個插件,并對它們進行了相應的配置。

總結(jié)

當我們執(zhí)行 mvn package 命令進行打包時,Maven 會按照配置文件 package.xml 和插件的配置來生成最終的分發(fā)包。Maven Assembly Plugin 會根據(jù)配置文件定義的規(guī)則將項目的相關(guān)文件、依賴庫等內(nèi)容打包成指定的格式,并完成最終的分發(fā)包構(gòu)建。

通過以上的配置和打包過程,我們可以很方便地使用 Maven 來管理項目的打包和發(fā)布,而不需要手動進行復雜的文件拷貝和整理工作。

責任編輯:武曉燕 來源: 修己xj
相關(guān)推薦

2009-12-23 16:13:00

WPF Attache

2010-03-31 14:58:03

云計算

2009-12-07 16:07:03

PHP類的繼承

2010-07-21 09:38:15

PHP緩存技術(shù)

2010-11-22 14:18:32

MySQL鎖機制

2009-11-20 17:17:08

Oracle函數(shù)索引

2021-05-17 05:36:02

CSS 文字動畫技巧

2009-10-16 18:20:07

綜合布線系統(tǒng)

2009-12-01 16:34:21

PHP表單

2023-10-23 12:35:36

Golang追加操作

2010-03-05 13:44:00

Python序列

2009-08-27 11:27:58

foreach語句C# foreach語

2023-01-12 17:18:06

數(shù)據(jù)庫多云

2011-02-25 09:23:00

Java類加載器

2015-09-02 08:57:56

JavaHashMap工作原理

2013-07-11 09:45:48

扁平化扁平化設(shè)計

2012-02-28 14:43:43

2009-10-16 09:17:39

屏蔽布線系統(tǒng)

2009-12-14 14:40:10

Ruby全局域變量

2009-12-07 13:55:58

PHP array_m
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品自在在线观看 | 精品一区二区三区四区在线 | 日日操网站 | 中文字幕视频免费 | 国产一区亚洲 | 欧美日韩国产在线观看 | 欧美日高清| 久久中文字幕电影 | 国产一级久久久久 | 欧美午夜视频 | 亚洲啊v在线| 国产日韩欧美精品一区二区三区 | 一区二区三区国产 | 日韩欧美视频网站 | 小视频你懂得 | 91久久国产综合久久 | 久久九九99| 日韩欧美国产综合 | 精品欧美一区二区中文字幕视频 | 精品二区| 亚洲成人一区二区 | 色免费视频 | 欧美成人aaa级毛片在线视频 | 97超碰人人草 | 熟女毛片| 成人欧美一区二区三区黑人孕妇 | 人人干免费 | 免费黄色a级毛片 | 欧美视频一区二区三区 | 成人深夜福利 | 欧美一区二区另类 | 久久精品国产一区二区三区 | www.99热| 天天操天天射综合网 | 亚洲欧美一区二区三区在线 | 中文字幕乱码一区二区三区 | 免费av手机在线观看 | 久久在线视频 | 色婷婷综合久久久中文字幕 | 国产精品九九九 | 亚洲午夜精品 |