在部署Spring Boot生產項目時,首先需要使用Maven將其打包成一個JAR文件或者包含JAR文件的ZIP文件。隨后,通過堡壘機將打包好的文件上傳至服務器進行部署,或構建成Docker鏡像進行發布。在這一過程中,我們需要將項目中的配置文件或靜態資源放置在JAR包之外,這樣在修改配置文件或靜態資源時就無需重新打包。為了構建ZIP文件,我們使用了Maven Assembly Plugin插件,該插件用于創建項目分發包,通過一個XML描述文件定義打包內容。本文將詳細介紹這一流程。
maven-assembly-plugin 是一個 Maven 插件,用于創建項目分發包。該插件可以幫助將項目的構建輸出、依賴庫等資源打包成一個歸檔文件,如 JAR、ZIP、TAR 等,方便項目的部署和發布。
以下是 maven-assembly-plugin 的一些主要特點和用途:
讓我們來看一下 Maven Assembly Plugin 的配置文件 package.xml,這個文件定義了項目打包的內容和形式。在這個 XML 文件中,我們定義了項目打包的格式為 zip 和 dir,同時指定了一些文件和目錄的打包規則。
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"> <!--項目打包統一文件 --> <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 中,我們還可以定義需要打包的依賴庫、啟動腳本文件、靜態資源文件以及啟動 jar 文件等內容。也可以在通過來排除一些我們不需要的資源, 通過這個 XML 文件,我們可以靈活地配置項目打包的內容和結構。
在項目的POM文件中,我們還需要引入maven-assembly-plugin插件,并指定其配置文件。由于我們需要將配置文件和靜態資源放置在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 這幾個插件,并對它們進行了相應的配置。
當我們執行 mvn package 命令進行打包時,Maven 會按照配置文件 package.xml 和插件的配置來生成最終的分發包。Maven Assembly Plugin 會根據配置文件定義的規則將項目的相關文件、依賴庫等內容打包成指定的格式,并完成最終的分發包構建。
通過以上的配置和打包過程,我們可以很方便地使用 Maven 來管理項目的打包和發布,而不需要手動進行復雜的文件拷貝和整理工作。
本文鏈接:http://www.www897cc.com/showinfo-26-79310-0.html深入探討Maven打包:打造精致的Zip包
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 同城雙活:交易鏈路的穩定性與可靠性探索