Maven 外掛
我們用了 mvn archetype:generate 命令來生成一個專案。那麼這裡的 archetype:generate 是什麼意思呢?archetype 是一個外掛的名字,generate是目標(goal)的名字。這個命令的意思是告訴 maven 執行 archetype 外掛的 generate 目標。外掛目標通常會寫成
一個目標是一個工作單元,而外掛則是一個或者多個目標的集合。比如說Jar外掛,Compiler外掛,Surefire外掛等。從看名字就能知道,Jar 外掛包含建立Jar檔案的目標, Compiler 外掛包含編譯原始碼和單元測試程式碼的目標。Surefire 外掛的話,則是執行單元測試。
看到這裡,估計你能明白了,mvn 本身不會做太多的事情,它不知道怎麼樣編譯或者怎麼樣打包。它把構建的任務交給外掛去做。外掛定義了常用的構建邏輯,能夠被重複利用。這樣做的好處是,一旦外掛有了更新,那麼所有的 maven 使用者都能得到更新。
mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT
Maven 生命週期
我們用的第二個命令是:mvn package。這裡的 package 是一個maven的生命週期階段 (lifecycle phase )。生命週期指專案的構建過程,它包含了一系列的有序的階段 (phase),而一個階段就是構建過程中的一個步驟。
那麼生命週期階段和上面說的外掛目標之間是什麼關係呢?外掛目標可以繫結到生命週期階段上。一個生命週期階段可以繫結多個外掛目標。當 maven 在構建過程中逐步的通過每個階段時,會執行該階段所有的外掛目標。
maven 能支援不同的生命週期,但是最常用的是預設的Maven生命週期 (default Maven lifecycle )。如果你沒有對它進行任何的外掛配置或者定製的話,那麼上面的命令 mvn package 會依次執行預設生命週期中直到包括 package 階段前的所有階段的外掛目標:
process-resources 階段:resources:resources
compile 階段:compiler:compile
process-classes 階段:(預設無目標)
process-test-resources 階段:resources:testResources
test-compile 階段:compiler:testCompile
test 階段:surefire:test
prepare-package 階段:(預設無目標)
mvn package 來構建專案
當你第一次執行 maven 的時候,它會從網上的 maven 庫 (repository) 下載需要的程式,存放在你電腦的本地庫 (local repository) 中,所以這個時候你需要有 Internet 連線。Maven 預設的本地庫是 ~/.m2/repository/ ,在 Windows 下是 %USER_HOME%\.m2\repository\ 。
2、使用Maven清理專案
在基於Maven的專案中,很多快取輸出在“target”資料夾中。如果想建立專案部署,必須確保清理所有快取的輸出,從面能夠隨時獲得最新的部署。
要清理專案快取的輸出,發出以下命令:mvn clean 來清理專案,當mvn clean執行,在“target”資料夾中的一切都將被刪除。
部署進行生產
要部署您的專案進行生產,它總是建議使用 “mvn clean package“, 以確保始終獲得最新的部署。
3、使用Maven執行單元測試
mvn test 這會在你的專案中執行整個單元測試
package com.yiibai.core;
import junit.framework.Assert;
import org.junit.Test;
public class TestApp2 {
@Test
public void testPrintHelloWorld2() {
Assert.assertEquals(App.getHelloWorld2(), "Hello World 2");
}
}複製程式碼
為了執行單個測試(TestApp2),發出此命令: mvn -Dtest=TestApp2 test
4、將專案安裝到Maven本地資源庫
在Maven中,可以使用 mvn install 打包專案,並自動部署到本地資源庫,讓其他開發人員使用它。
注意,當“install”在執行階段,上述所有階段 “validate“, “compile“, “test“, “package“, “integration-test“, “verify” 階段, 包括目前的“install”階段將被執行有序。
mvn install 示例
一個Java專案,具有以下 pom.xml 檔案
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai.core</groupId>
<artifactId>yiibai-core</artifactId>
<packaging>jar</packaging>
<version>99</version>
<name>yiibai-core</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>複製程式碼
基於以上pom.xml檔案,在“mvn install”被執行,它會打包專案為“yiibai-core-99.jar”檔案,並複製到本地儲存庫。
它總是建議執行“clean”和“install”在一起,讓您能始終部署最新的專案到本地儲存庫。
mvn clean install複製程式碼
mvn site複製程式碼
在Maven中,可以使用“mvn site”,為您的專案資訊生成文件站點。生成的網站是在專案的“target/site”資料夾中。
6、使用“mvn site-deploy”部署站點
mvn site:deploy
在 pom.xml 中,配置在 “distributionManagement” 標籤部署你的網站。
<distributionManagement>
<site>
<id>yiibaiserver</id>
<url>dav:http://127.0.0.1/sites/</url>
</site>
</distributionManagement>複製程式碼
“dav”字首是HTTP協議之前新增的,這意味著通過WebDAV機制部署您的網站。或者,可以用“scp”取代它,如果您的伺服器支援“scp”訪問。
告訴Maven來使用“wagon-webdav-jackrabbit”擴充套件部署。
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<version>1.0-beta-7</version>
</extension>
</extensions>
</build>複製程式碼
mvn site:deploy 命令執行:所有站點資料夾和檔案,在專案資料夾- “target/site”會被自動部署到伺服器。
7、生成mvn樹
mvn dependency:tree > tree.txt
8、打包
cd 到對應的待打包的目錄下
mvn clean deploy -DskipTests=true