1. 程式人生 > 程式設計 >Maven3種打包方式中maven-assembly-plugin的使用詳解

Maven3種打包方式中maven-assembly-plugin的使用詳解

  • maven-jar-plugin,預設的打包外掛,用來打普通的project JAR包;
  • maven-shade-plugin,用來打可執行JAR包,也就是所謂的fat JAR包;
  • maven-assembly-plugin,支援自定義的打包結構,也可以定製依賴項等。

我們日常使用的以maven-assembly-plugin為最多,因為大資料專案中往往有很多shell指令碼、SQL指令碼、.properties及.xml配置項等,採用assembly外掛可以讓輸出的結構清晰而標準化。
要使用該外掛,就在專案pom檔案中加入以下內容。

 <build>
 <plugins>
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>${maven-assembly-plugin.version}<version>
  <executions>
   <execution>
   <id>make-assembly</id>
   <!-- 繫結到package生命週期 -->
   <phase>package</phase>
   <goals>
    <!-- 只執行一次 -->
    <goal>single</goal>
   </goals>
   </execution>
  </executions>
  <configuration>
   <!-- 配置描述符檔案 -->
   <descriptor>src/main/assembly/assembly.xml</descriptor>
   <!-- 也可以使用Maven預配置的描述符
   <descriptorRefs>
   <descriptorRef>jar-with-dependencies</descriptorRef>
   </descriptorRefs> -->
  </configuration>
  </plugin>
 </plugins>
 </build>

assembly外掛的打包方式是通過descriptor(描述符)來定義的。
Maven預先定義好的描述符有bin,src,project,jar-with-dependencies等。比較常用的是jar-with-dependencies,它是將所有外部依賴JAR都加入生成的JAR包中,比較傻瓜化。
但要真正達到自定義打包的效果,就需要自己寫描述符檔案,格式為XML。下面是我們的專案中常用的一種配置。

<assembly>
 <id>assembly</id>
 
 <formats>
 <format>tar.gz</format>
 </formats>
 
 <includeBaseDirectory>true</includeBaseDirectory>
 
 <fileSets>
 <fileSet>
  <directory>src/main/bin</directory>
  <includes>
  <include>*.sh</include>
  </includes>
  <outputDirectory>bin</outputDirectory>
  <fileMode>0755</fileMode>
 </fileSet>
 <fileSet>
  <directory>src/main/conf</directory>
  <outputDirectory>conf</outputDirectory>
 </fileSet>
 <fileSet>
  <directory>src/main/sql</directory>
  <includes>
  <include>*.sql</include>
  </includes>
  <outputDirectory>sql</outputDirectory>
 </fileSet>
 <fileSet>
  <directory>target/classes/</directory>
  <includes>
  <include>*.properties</include>
  <include>*.xml</include>
  <include>*.txt</include>
  </includes>
  <outputDirectory>conf</outputDirectory>
 </fileSet>
 </fileSets>
 
 <files>
 <file>
  <source>target/${project.artifactId}-${project.version}.jar</source>
  <outputDirectory>.</outputDirectory>
 </file>
 </files>
 
 <dependencySets>
 <dependencySet>
  <unpack>false</unpack>
  <scope>runtime</scope>
  <outputDirectory>lib</outputDirectory>
 </dependencySet>
 </dependencySets>
</assembly>

id與formats

formats是assembly外掛支援的打包檔案格式,有zip、tar、tar.gz、tar.bz2、jar、war。可以同時定義多個format。
id則是新增到打包檔名的識別符號,用來做字尾。
也就是說,如果按上面的配置,生成的檔案就是artifactId−{artifactId}-artifactId−{version}-assembly.tar.gz。

fileSets/fileSet

用來設定一組檔案在打包時的屬性。

directory:源目錄的路徑。
includes/excludes:設定包含或排除哪些檔案,支援萬用字元。
fileMode:指定該目錄下的檔案屬性,採用Unix八進位制描述法,預設值是0644。

outputDirectory:生成目錄的路徑。

files/file
與fileSets大致相同,不過是指定單個檔案,並且還可以通過destName屬性來設定與原始檔不同的名稱。
dependencySets/dependencySet
用來設定工程依賴檔案在打包時的屬性。也與fileSets大致相同,不過還有兩個特殊的配置:

unpack:布林值,false表示將依賴以原來的JAR形式打包,true則表示將依賴解成*.class檔案的目錄結構打包。
scope:表示符合哪個作用範圍的依賴會被打包進去。compile與provided都不用管,一般是寫runtime。

按照以上配置打包好後,將.tar.gz檔案上傳到伺服器,解壓之後就會得到bin、conf、lib等規範化的目錄結構,十分方便。

參考
https://www.jb51.net/article/144979.htm

到此這篇關於Maven3種打包方式中maven-assembly-plugin的使用的文章就介紹到這了,更多相關Maven打包方式maven-assembly-plugin的使用內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!