【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