【Maven權威指南】Maven實戰篇:一個簡單的Maven項目

一、用Maven Archetype插件創建簡單項目。

1>在終端(* UNIX或Mac)或命令提示符(Windows)中,瀏覽到要創建 Java 項目的文件夾。鍵入以下命令:

mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

這告訴 Maven 來從 maven-archetype-quickstart 模板創建 Java 項目。如果忽視 archetypeArtifactId 選項,一個巨大的 Maven 模板列表將列出。

例如,這裏的工作目錄是:C:\worksp,執行命令過程時間可能比較久,看個人的網絡狀況。
C:\worksp>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerat
or -DarchetypeArtifactId=maven -archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: basedir, Value: C:\worksp
[INFO] Parameter: package, Value: com.yiibai
[INFO] Parameter: groupId, Value: com.yiibai
[INFO] Parameter: artifactId, Value: NumberGenerator
[INFO] Parameter: packageName, Value: com.yiibai
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\worksp\NumberGenerato
r
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.166 s
[INFO] Finished at: 2015-10-27T11:03:48+08:00
[INFO] Final Memory: 17M/114M
[INFO] ------------------------------------------------------------------------

在上述情況下,一個新的Java項目命名 “NumberGenerator”, 而整個項目的目錄結構會自動創建。

2>Maven的目錄結構

使用 mvn archetype:generate + maven-archetype-quickstart 模板, 以下項目的目錄結構被創建。

NumberGenerator
   |-src
   |---main
   |-----java
   |-------com
   |---------yiibai   
   |-----------App.java
   |---test|-----java
   |-------com
   |---------yiibai
   |-----------AppTest.java
   |-pom.xml

這個生成的目錄遵循Maven標準目錄佈局。

a>artifactId匹配的目錄----NumberGenerator。這是項目的基本目錄,即項目名。

b>每個項目在文件pom.xml裏有它的項目對象模型(POM)。這個文件描述了這個項目,配置了插件,聲明瞭依賴。

c>項目源碼和資源文件被放在src/main目錄下,Java類放在src/main/java下面,而classpath資源文件放在src/main/resources下面。

d>測試文件放在src/test。其中src/test/java存放Java測試類,目錄src/test/resources下存放測試的classpath資源文件。

二、構建Maven項目

遵循Maven插件創建了一個項目,希望構建並打包這個應用,在包含pom.xml的目錄下運行mvn install

這樣就創建、編譯、測試、打包,並且安裝了最簡單的Maven項目。在命令行運行它來驗證這個程序是否工作。

在pom.xml目錄下運行

java -cp target/simple-1.0-SNAPSHOT.jar org.sonatype.mavenbook.App

三、簡單的項目對象模型

當Maven運行時向項目對象模型(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.companyname.bank</groupId>
  <artifactId>consumerBanking</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>consumerBanking</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>
1>這個pom.xml文件時面對Maven項目中最基礎的POM,最開始的幾個元素-groupId,artifactId,packaging,version-是Maven的座標,它們唯一標識了一個項目。name和url是POM提供的描述性元素,它們提供可閱讀的名字,項目關聯的web站點。最後,dependencies元素定義了一個單獨的測試範圍依賴,依賴於稱爲JUnit的單元測試框架。

2>當Maven運行時,採用許多的全局默認值。想看真正運行時的“有效的”POM,在simple項目的基礎目錄下跑下面的命令。

mvn help:effective-pom

四、核心概念

( 1 )Maven插件和目標

( 2 )Maven生命週期

1>一個階段是在被Maven稱爲“構建生命週期”中的一個步驟。生命週期是包含在一個項目構建中的一系列有序的階段。Maven可以支持許多不同的生命週期,但是最常用的生命週期是默認的Maven生命週期,這個生命週期中一開始的一個階段是驗證項目的基本完整性,最後一個階段是把一個項目發佈成產品。

2>生命週期的階段被特地留的含糊,單獨的定義爲驗證、測試、或者發佈,而他們對不同的項目意味着不同的事情。

3>插件目標可以附着在生命週期階段上。隨着生命週期的階段移動,他會執行附着在特定階段上的目標。每個階段可能綁定了零個或多個目標。

( 3 )Maven座標

1>Maven座標通常用冒號作爲分隔符,格式爲:groupId:artifactId:packaging:version

groupId 團體,公司,小組,組織,項目,或者其它團體。

artifactId 在groupId下的表示一個單獨項目的唯一標識符

version 一個項目的特定版本。正在開發的項目可以用一個特殊的標識,這種標識給版本加上一個“SNAPSHOT”的標記。

2>項目的打包格式也是Maven座標的重要組成部分,但是它不是項目唯一標識符的一個部分。之前的三個標識使項目獨一無二。

packaging 項目的類型,默認是jar,描述了項目打包後的輸出。類型爲jar的項目產生一個JAR文件,類型爲war的項目產生一個web應用。

( 4 )Maven倉庫

1>初始的Maven下載包相當的小,其中的一個原因是事實上這個初始的Maven不包括很多插件。它只包含幾近赤裸的最少值,而在需要的時候再從遠程倉庫去取。Maven自帶了一個用來下載Maven核心插件和依賴的遠程倉庫地址(http://repo1.maven.org/maven2)。

2>Maven倉庫的標準是按照下面的目錄格式來存儲構件,相對於倉庫的根目錄:

/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>

3>Maven從遠程倉庫下載構件和插件到本機上,存儲在你的本地Maven倉庫裏。一旦Maven已經從遠程倉庫下載了一個構件,它將永遠不需要再下載一次,因爲maven會首先在本地倉庫查找插件,然後纔是其它地方。

注:install階段執行一個目標,把你項目的構件安裝到你的本地倉庫。

Maven倉庫既是一個從遠程倉庫下載的構件的緩存,也允許你的項目相互依賴。

( 5 )Maven依賴管理

1>一個複雜的項目將會包含很多依賴,也有可能包含依賴於其它構件的依賴。這是Maven最強大的特徵之一,它支持傳遞性依賴。

即:假如你的項目依賴於一個庫,而這個庫又依賴於五個或十個其它的庫,你不必找出所有的依賴寫入pom.xml,你只需加入你直接依賴的那些庫,Maven會隱式的把這些庫間接依賴的庫加入到你的項目。而且會處理這些依賴中的衝突,同時能讓你自定義默認行爲,或者排除一些特定的傳遞性依賴。

2>當項目的構件安裝到本地倉庫時,在jar文件同一目錄下,Maven發佈了一個稍微修改過的pom.xml的版本。記錄了項目有哪些依賴,以便實現傳遞性依賴。

3>在POM文件中可能聲明瞭對其它構件的依賴。這些依賴的依賴叫做傳遞性依賴。

Maven倉庫不僅僅存儲二進制文件,也存儲了這些構件的元數據,才使傳遞性依賴成爲可能。

( 6 )站點生成和報告

Maven的另一個重要特徵是,生成文檔和報告。在項目目錄下,運行mvn site

Site生命週期只關心處理在src/site目錄下的site內容,還有生成報告。在這個命令運行過後,你將會在target/site目錄下看到一個項目的web站點。

注:在學習過程中,發現版本更新差異,所以可以結合http://www.yiibai.com/maven/create-a-java-project-with-maven.html學習。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章