maven打包

1. 背景

工程中免不了要經過maven打包。html

2. maven三種打包插件

plugin function site
maven-jar-plugin maven 默認打包插件,用來建立 project jar  
maven-shade-plugin 用來打可執行包,executable(fat) jar http://maven.apache.org/plugins/maven-shade-plugin/
maven-assembly-plugin 支持定製化打包方式,例如,apache 項目的打包方式 http://maven.apache.org/components/plugins/maven-assembly-plugin/

咱們主要打zip包,也就是使用maven-assembly-plugin。apache

3. maven assembly plugin

maven assembly plugin容許用戶將依賴項、模塊、文檔和其餘文件聚合到一個可發佈的歸檔文件中。app

咱們能夠經過預製的描述文件打包文件,這些描述能夠處理常見操做,好比打包工程包和文件到一個zip文件裏面。eclipse

其實咱們也能夠自定義描述文件對依賴包,模塊,file-sets和單個文件更高級別的控制。maven

當前支持以下格式的文件打包:ui

  • zip
  • tar
  • tar.gz (or tgz)
  • tar.bz2 (or tbz2)
  • tar.snappy
  • tar.xz (or txz)
  • jar
  • dir
  • war
  • and any other format that the ArchiveManager has been configured for

假如你想把工程打包成一個uber-jar,能夠參考Maven Shade Plugin,不在本文討論範圍。url

使用maven assembly plugin的步驟以下:spa

  • 自定義assembly描述文件,能夠參考Assembly Descriptor Format
  • 在工程的pom.xml文件裏面配置assembly plugin
  • 運行mvn assembly:single命令

4. 實例

首先給個官方的demo地址插件

4.1 建立一個maven工程mvnassembly

爲了演示建立lib文件夾,放入隨意兩個jar包,建立資源目錄src/main/resources,並隨機放入一個文件。code

建立完以後目錄結構以下:

4.2 自定義assembly描述文件-assembly.xml

assembly.xml文件與pom.xml同級,內容以下:

描述文件格式請參考:http://maven.apache.org/components/plugins/maven-assembly-plugin/assembly.html

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <!-- 這個id會出如今zip包名稱的後面,zip的完整名是:pom.xml中的artifactId-version-id.zip -->
    <id>myzip</id>
    <!--支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war-->
    <formats>
        <format>zip</format>
    </formats>
    <!-- 這裏指定須要包含的其餘文件 -->
    <fileSets>
        <!--管理一組文件的存放位置-->
        <fileSet>
            <!--源目錄-->
            <directory>lib</directory>
            <!--放在哪-->
            <outputDirectory>lib</outputDirectory>
        </fileSet><fileSet>
            <directory>src/main/resources</directory>
            <outputDirectory>.</outputDirectory>
        </fileSet>
    </fileSets>
    <!-- 用來定製工程依賴 jar包的打包方式,依賴包的輸出路徑 -->
    <dependencySets>
        <dependencySet>
            <!--依賴jar包的輸出目錄-->
            <outputDirectory>lib</outputDirectory>
            <useProjectArtifact>false</useProjectArtifact>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
</assembly>

4.3 在工程的pom.xml文件裏面配置assembly plugin

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lujiango</groupId>
  <artifactId>mvnassembly</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>mvnassembly</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
      <version>4.0</version>
    </dependency>
  </dependencies>
  
  <build>
        <plugins>
            <!-- 打包插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <descriptors>
                        <!-- 指定描述文件 -->    
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
  </build>
  
</project>

4.4 打包

由於我使用的是eclipse,因此我直接經過右擊工程->Run As-> Maven clean,而後在右擊工程->Run As->Maven install,就能夠打包了。

4.5 檢查zip包

打出的包爲mvnassembly-0.0.1-SNAPSHOT-myzip.zip,符合artifactId-version-id.zip命名格式。

打開zip包,是一個文件夾:

點擊進入:

進入lib目錄:

驗證是OK。

相關文章
相關標籤/搜索