1. 程式人生 > 實用技巧 >maven-外掛

maven-外掛

maven外掛是在生命週期中某些階段執行的任務。一個外掛完成一項功能。

1. maven-compiler-plugin

2. maven-jar-plugin

3. maven-shade-plugin

4. maven-assembly-plugin

5. spring-boot-maven-plugin

maven-compiler-plugin

編譯Java原始碼,一般只需設定編譯的jdk版本

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6
.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>

maven-jar-plugin

maven 預設打包外掛,用來建立 project jar。

打成jar時,設定manifest的引數,比如指定執行的Main class,還有依賴的jar包,加入classpath中。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4
</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>/data/lib</classpathPrefix> <mainClass>com.zhang.spring.App</mainClass> </manifest> </archive> </configuration> </plugin>

maven-shade-plugin

用於把多個jar包,打成1個jar包,一般Java專案都會依賴其他第三方jar包,最終打包時,希望把其他jar包包含在一個jar包裡。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.test.WordCount</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

maven-assembly-plugin

定製化打包方式。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <!-- 繫結到package生命週期階段上 -->
                        <phase>package</phase>
                        <goals>
                            <!-- 只執行一次 -->
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <finalName>${assembly.name}</finalName>
                            <!--false 打包檔案末尾不包含assembly id-->
                            <appendAssemblyId>false</appendAssemblyId>
                            <descriptors>
                                <!--配置描述檔案路徑-->
                                <descriptor>assembly.xml</descriptor>
                            </descriptors>
                            <outputDirectory>${project.parent.basedir}/dist</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

assembly.xml:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
    <id>${project.version}</id>
    <formats>
        <format>tgz</format>
    </formats>
    <!--預設值是:true。
        設定為true將建立一個包含此基本目錄的歸檔檔案。      /libra-service-1.1.0/libra-service-1.1.0
        設定為false,則建立的存檔將其內容解壓縮到當前目錄。 /libra-service-1.1.0
     -->
    <includeBaseDirectory>false</includeBaseDirectory>

    <!--
    libra-service-1.1.0 (libra-service-1.1.0.tgz)
      conf:
        conf下面所有檔案
      jars:
        libra-service-1.1.0.jar
        libra-dps.jar
      sbin:
        sbin下面所有檔案
    -->
    <!--指定包含在程式集中的每個包含模組的哪些檔案組。fileSet通過提供一個或多個<fileSet>子元素來指定。-->
    <fileSets>
        <fileSet>

            <!--設定模組目錄的絕對或相對位置。-->
            <directory>${project.parent.basedir}/libra-dps/target</directory>
            <!--設定輸出目錄相對於程式集根目錄的根目錄。-->
            <outputDirectory>${assembly.name}/jars</outputDirectory>
            <includes>
                <include>libra*.jar</include>
            </includes>
        </fileSet>

        <fileSet>
            <directory>${project.parent.basedir}/libra-service/target</directory>
            <outputDirectory>${assembly.name}/jars</outputDirectory>
            <includes>
                <include>libra*.jar</include>
            </includes>
        </fileSet>

        <fileSet>
            <directory>${project.parent.basedir}/sbin</directory>
            <outputDirectory>${assembly.name}/sbin</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </fileSet>

        <fileSet>
            <directory>${project.parent.basedir}/conf</directory>
            <outputDirectory>${assembly.name}/conf</outputDirectory>
            <includes>
                <include>*</include>
                <include>*/*</include>
            </includes>
        </fileSet>
    </fileSets>

</assembly>

這裡指定將兩個jar包, sbin資料夾, conf資料夾打包生成在libra-service-1.1.0.tgz

spring-boot-maven-plugin

spring-boot-maven-plugin外掛是將springboot的應用程式打包成fat jar的外掛。

我們一般的jar,裡面放的是.class檔案已經resources目錄下的東西,但是fat jar 它可以把jar作為內容包含進去。也就是說,spring boot 藉助spring-boot-maven-plugin將所有應用啟動執行所需要的jar都包含進來,從邏輯上將具備了獨立執行的條件。

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>${springboot.verison}</version>
        <configuration>
          <mainClass>com.ultiwill.libra.Application</mainClass>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>