1. 程式人生 > >【MAVEN】專案管理外掛maven-plugins

【MAVEN】專案管理外掛maven-plugins

    Maven是一個專案管理工具,它包含了一個專案物件模型 (Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的專案物件模型來描述你的專案,然後Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)外掛。
    Maven 有一個生命週期,當你執行 mvn install 的時候被呼叫。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命週期旅途中的一個影響就是,Maven 運行了許多預設的外掛目標,這些目標完成了像編譯和建立一個 JAR 檔案這樣的工作。
    Maven本質上是一個外掛框架,他定義好了POM後,由外掛來完成構建功能。今天主要介紹一些常用的Maven框架。

一.清理外掛

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-clean-plugin</artifactId>
</plugin>

    該外掛用來刪除在構建期間生成的檔案或資料夾。掃描並刪除以下資料夾:project.build.directory,project.build.outputDirectory,project.build.testOutputDirectory, and project.reporting.outputDirectory。
    使用方式: mvn clean

二.編譯外掛

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration
>
</plugin>

source: 原始碼編譯JDK版本
target:目標平臺編譯版本
encoding:字符集編碼

    該外掛包含兩個goals:

  • compiler:compile編譯mainSource,在適宜的階段自動執行。
  • compiler:testCompile編譯testSource,在適宜的階段自動執行。

    使用方式: mvn compiler

三.資源外掛

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <!-- 繫結到package階段,自動執行 -->
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <encoding>UTF-8</encoding>
                <outputDirectory>outputdir</outputDirectory>
                <resources>
                    <resource>
                        <includes>
                            <!-- 資源中包含的檔案匹配符 -->
                            <include>*.txt</include>
                        </includes>
                        <filtering>true</filtering>
                    </resource>
                </resources>
        </execution>
    </executions>
</plugin>

    該外掛用於複製指定的資原始檔到output directory. 有三個goals:

  • resources:resources 複製主程式碼的資原始檔到指定的輸出目錄中,一般是開發包下的資原始檔(project.build.resources),也就是src/main/resources下的。一般用於資原始檔的打包
  • resources:testResources複製測試程式碼的資原始檔到指定的輸出目錄中,一般是測試包下的資原始檔(project.build.testResources)。
  • resources:copy-resources複製指定的資原始檔到指定的目錄中。專用來在多模組中複製資源使用。

四.依賴外掛

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <!-- 繫結到compile期間 -->
            <phase>compile</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <!-- 表示是否不包含間接依賴的包 -->
                <excludeTransitive>false</excludeTransitive>
                <!-- 表示複製的jar檔案去掉版本資訊 -->
                <stripVersion>true</stripVersion>
            </configuration>
        </execution>
    </executions>
</plugin>

    該外掛用於從本地或者遠端的repository中複製(或/和)解壓依賴的jar到指定的位置。當前外掛的goals較多,在此就不一一列舉了。列舉常用的如下:
- dependency:copy將外掛配置部分中定義的工件列表(<artifactItems>),並將其複製到指定的位置。
- dependency:copy-dependencies需要專案直接依賴項和可選傳遞依賴項的列表,並將它們複製到指定的位置。

五.打包外掛

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <!-- 可以有多個descriptorRefs -->
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <!-- 可以指定一個特殊的descriptor -->
        <!-- 
        <descriptors>
            <descriptor>src/assembly/src.xml</descriptor>
        </descriptors>
        -->
        <!-- 繫結執行期間-->
        <executions>
            <execution>
                <id>make-assembly</id> <!-- this is used for inheritance merges -->
                <phase>package</phase> <!-- bind to the packaging phase -->
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executoins>
        <!-- 建立一個可執行的jar -->
        <archive>
            <manifest>
              <mainClass>org.sample.App</mainClass>
            </manifest>
         </archive>
    </configuration>
</plugin>

    該外掛主要用於將依賴的jar,模組,site文件,其他的檔案等聚合到一個單獨的archive中。archive支援如下格式:
         - zip
         - tar
         - tar.gz (or tgz)
         - tar.bz2 (or tbz2)
         - jar
         - dir
         - war
         - and any other format that the ArchiveManager has been configured for

想要使用Assembly外掛,你需要:

     - 選擇或者寫好一個descriptor去使用
     - 在你的專案中配置好Assembly外掛
    - 在你的專案中執行 mvn assembly:single or mvn package