Maven基本操作命令

wangchun_166發表於2017-12-21

Maven 外掛


我們用了 mvn archetype:generate 命令來生成一個專案。那麼這裡的 archetype:generate 是什麼意思呢?archetype 是一個外掛的名字,generate是目標(goal)的名字。這個命令的意思是告訴 maven 執行 archetype 外掛的 generate 目標。外掛目標通常會寫成

pluginId:goalId

一個目標是一個工作單元,而外掛則是一個或者多個目標的集合。比如說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 階段前的所有階段的外掛目標:

  1. process-resources 階段:resources:resources

  2. compile 階段:compiler:compile

  3. process-classes 階段:(預設無目標)

  4. process-test-resources 階段:resources:testResources

  5. test-compile 階段:compiler:testCompile

  6. test 階段:surefire:test

  7. prepare-package 階段:(預設無目標)


1、使用Maven構建專案

    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 檔案

File : 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”檔案,並複製到本地儲存庫。

Install project to Maven local repository
警告
它總是建議執行“clean”和“install”在一起,讓您能始終部署最新的專案到本地儲存庫。

mvn clean install複製程式碼

5、生成基於Maven的專案文件站點

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