5分鐘 maven3 快速入門指南

  • 前提條件

    你首先須要瞭解如何在電腦上安裝軟件。若是你不知道如何作到這一點,請詢問你辦公室,學校裏的人,或花錢找人來解釋這個給你。 不建議給Maven的服務郵箱來發郵件尋求支持。html

  • 安裝Maven

    Maven是基於java的工具,因此你的電腦上必須安裝了java環境。
java

    首先,下載Maven和按照安裝說明進行操做。而後,在終端或在命令行中鍵入如下命令:shell

mvn --version

   終端或命令行中應該打印出本機所安裝的Maven的版本,以下:apache

Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800)
Maven home: /usr/local/apache-maven-3.1.1
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: zh_CN, platform encoding: EUC_CN
OS name: "mac os x", version: "10.9.1", arch: "x86_64", family: "mac"

  若是是Windows環境,格式應該相似這樣:windows

Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: D:\apache-maven-3.0.5\bin\..
Java version: 1.6.0_25, vendor: Sun Microsystems Inc.
Java home: C:\Program Files\Java\jdk1.6.0_25\jre
Default locale: nl_NL, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

  根據你的網絡設置,您可能須要一些額外的設置。若是須要設置,請參考Maven配置嚮導服務器

  若是使用的是Windows環境 ,你應該看看Windows安裝前提條件,來確保可以在Windows上使用Maven網絡

  • 建立Maven項目

    首先,建立存放項目的目錄(例如d:\maven_proj或者/Users/xxx/maven_proj),打開終端或者命令行,切換到該目錄下,執行如下Maven命令:框架

mvn archetype:generate -DgroupId=com.oschina.test -DartifactId=my-maven-test -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

    若是是剛安裝了Maven的,第一次運行可能須要一段時間。這是由於Maven正在從網上下載大部分最近的artifacts (plugin jars and other files)到你的本地倉庫。可能須要執行幾回該命令才能成功。這是由於在下載完成以前,遠程服務器的鏈接可能超時。maven

    輸出的命令行可能相似:
ide

[WARNING] 
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...</activeProfiles>\n  -->\n  <activeProfile>... @278:18)  @ /usr/local/apache-maven-3.1.1/conf/settings.xml, line 278, column 18
[WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...</activeProfiles>\n  -->\n  <activeProfile>... @278:18)  @ /Users/flanliulf/.m2/settings.xml, line 278, column 18
[WARNING] 
[INFO] Scanning for projects...
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata.xml (701 B at 0.3 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/2.2/maven-archetype-plugin-2.2.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/2.2/maven-archetype-plugin-2.2.pom (8 KB at 3.4 KB/sec)
....(此處省略)
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.0/maven-archetype-quickstart-1.0.pom (703 B at 1.1 KB/sec)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.oschina.test
[INFO] Parameter: packageName, Value: com.oschina.test
[INFO] Parameter: package, Value: com.oschina.test
[INFO] Parameter: artifactId, Value: my-maven-test
[INFO] Parameter: basedir, Value: /Users/flanliulf/maven-proj
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/flanliulf/maven-proj/my-maven-test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2:51.915s
[INFO] Finished at: Thu Jan 23 14:59:17 CST 2014
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------

    當輸出了「BUILD SUCCESS」時表示項目建立成功了,你會發現,生成的目標建立一個目錄,並給出了artifactId的相同的名稱。進入這個目錄。

cd my-maven-test

    該項目的目錄結構以下:

my-maven-test
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- oschina
    |               `-- test
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- oschina
                    `-- test
                        `-- AppTest.java

    src/main/java目錄中包含了項目的源代碼,src/test/java目錄中包含了項目的測試代碼,pom.xml文件是該項目的項目對象模型(Project Object Model),一般稱爲POM文件。

    POM

    pom.xml文件是一個Maven項目的核心配置文件。它是包含了大部分你指望如何build一個項目所需信息的一個配置文件。POM比較龐大並且比較複雜,可是即便沒有徹底理解,咱們也可以有效地使用它。該項目的POM以下:

<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.oschina.test</groupId>
  <artifactId>my-maven-test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-maven-test</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

    What did I just do?

    你執行了Maven的目標(goal) archetype:generate,並添加了一系列的參數。前綴archetype是包含了目標的插件。若是你熟悉Ant ,你能夠設想這相似於Ant中的任務(task)。這個目標建立了一個基於原型(archetype)的簡單項目。我只想說,一個插件是一系列擁有共同目的(general common purpose)的目標的集合。例如,jboss-maven-plugin插件,其目的是「處理各類JBoss項目deal with various jboss items」 。

    Build the Project   
mvn package

    命令行中將打印編譯時的各類信息,輸出了「BUILD SUCCESS」時表示項目編譯成功了。

[WARNING] 
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...</activeProfiles>\n  -->\n  <activeProfile>... @278:18)  @ /usr/local/apache-maven-3.1.1/conf/settings.xml, line 278, column 18
[WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...</activeProfiles>\n  -->\n  <activeProfile>... @278:18)  @ /Users/flanliulf/.m2/settings.xml, line 278, column 18
[WARNING] 
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building my-maven-test 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8 KB at 1.0 KB/sec)
。。。(省略)
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4.jar (26 KB at 13.9 KB/sec)

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.oschina.test.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-maven-test ---
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-archiver/2.5/maven-archiver-2.5.pom (5 KB at 3.5 KB/sec)
。。。(省略)
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-archiver/2.1/plexus-archiver-2.1.jar (181 KB at 32.7 KB/sec)
[INFO] Building jar: /Users/flanliulf/maven-proj/my-maven-test/target/my-maven-test-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:42.914s
[INFO] Finished at: Thu Jan 23 15:41:20 CST 2014
[INFO] Final Memory: 11M/81M
[INFO] ------------------------------------------------------------------------

    不一樣於執行的第一個命令(archetype:generate),你可能會注意到第二個是簡單的一個字 - package。這不是一個目標(goal),這是一個階段(phase)。 一個階段是一個構建的生命週期build lifecycle)中的一步,一個構建的生命週期,能夠看作是一系列階段的有序集合。當指定了一個階段時, Maven將順序執行每一個階段。例如,若是咱們執行編譯(compile)階段,實際被執行的各個階段以下:

1.validate
2.generate-sources
3.process-sources
4.generate-resources
5.process-resources
6.compile

    你可使用下面的命令來測試剛剛編輯和打包的jar:

java -cp target/my-maven-test-1.0-SNAPSHOT.jar com.oschina.test.App

    將會獲得以下輸出:

Hello World!

  • 運行Maven工具

    Maven經常使用階段(phase)

    雖然幾乎沒有一個完整的清單,可是下面列出了一些常常執行的默認生命週期(default)中的階段。

  • validate: 驗證項目是否正確,全部必須的信息是否可用。

  • compile: 編譯項目的主源碼,通常來講,是對src/main/resources目錄的內容進行變量替換等工做後,複製到項目輸出的主classpath目錄中。

  • test: 使用單元測試框架對編譯後的源碼進行測試 , 測試代碼不會被打包或部署。

  • package: 接受編譯好的代碼,打包成可發佈的格式,如JAR。

  • integration-test: process and deploy the package if necessary into an environment where integration tests can be run

  • verify: run any checks to verify the package is valid and meets quality criteria

  • install: 將包安裝到Maven本地倉庫,供本地其餘Maven項目使用。

  • deploy: 將最終的包複製到遠程倉庫,供其餘開發人員和Maven項目使用。

    還有值得注意的另外兩個Maven的生命週期超出了上面的默認列表 ,它們是:

  • clean: 清理上一次構建生成的文件

  • site: 生成項目站點文檔

    階段實際上被映射到底層的目標。每一個階段執行的具體目標依賴於項目的包裝類型。例如,若是項目類型是一個JAR的話,package 執行 jar:jar ,而若是項目類型是 WAR 的話,執行的是 war:war

    注意的是,階段(phase)和目標(goal)能夠順序執行。

mvn clean dependency:copy-dependencies package

    此命令將清理項目(clean the project),拷貝依賴(copy dependencies)和打包項目(package the project,即執行全部階段來打包) 。

    生成Site
mvn site

    此階段根據項目的POM文件生成了一個site。你能夠發如今target/site目錄下生成了文檔。

  • 結論

   這是一個很是簡單的快速入門指南。若是想進一步深刻理解相關內容,請參考 Maven Getting Started Guide

相關文章
相關標籤/搜索