Maven安裝
到http://maven.apache.org/download.html 下載最新的Maven版本,我下載的版本為最新的apache-maven-3.0.4。推薦使用最新的Maven 3,因為比以前的Maven 2性能更好,而且完全兼容Maven 2
下載好以后,解壓到一個目錄,我的目錄為 D:\apache-maven-3.0.4,接着配置Maven環境變量M2_HOME為你解壓的目錄,如下圖新建M2_HOME變量並追加到Path后面


如果要在CMD控制台運行Maven命令的話,還需要配置Jdk環境變量,因為我接下來的操作都是基於IntelliJ IDEA,所以我不用配置jdk環境變量,我在公司電腦上連Maven環境變量也不用配置,只需要在IDEA里面指定Maven的目錄即可,但筆記本上不知道為什么必須默認使用M2_HOME這個環境變量
Maven使用
打開IntelliJ IDEA,新建一個Maven項目,如下圖,項目名稱為HelloMaven
創建好后的目錄結構如下圖,IDEA自動為我們創建了src/main/java、src/test/java、以及pom.xml文件

按照Maven約定,項目的主目錄位於/src/main/java中,測試目錄位於src/test/java中,所以我們在最終打包項目的時候,只包含主目錄代碼,不會包含測試目錄里的代碼,而測試目錄里的代碼只會在測試時候用到。
最后pom.xml這個文件是我們Maven項目的核心文件,POM(Project Object Model,項目對象模型)定義了項目的基本信息,用於描述項目如何構建,聲明項目依賴,等等。
我們打開這個文件看看,
- <?xml version="1.0" encoding="UTF-8"?>
- <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/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>HelloMaven</groupId>
- <artifactId>HelloMaven</artifactId>
- <version>1.0</version>
- </project>
project是xml文件的根元素,我們主要關心根元素下的子元素
modelVersion定義了當前POM模型的版本,Maven 2 或Maven 3 只能是4.0.0
griupId定義了項目屬於哪個組,一般來說這個網網和公司或組織關聯,比如說,你所在的公司為mycom.那就應該定義為com.mycom.hellomaven,hellomaven為項目名稱
artifactId定義了當前Maven項目在組中的唯一id,例如HelloMaven這個項目,我則把他定義為hello-maven,還例如spring項目,他的groupId為org.springframework,對於content項目來說artifactId則為spring-content,web項目則為spring-web
接下來我們按照上面的約定在主目錄里創建com/mycom/hellomaven/HelloMaven類,並修改pom.xml文件
創建好的類代碼如下
- package com.mycom.hellomaven;
- public class HelloMaven {
- public String helloMaven() {
- return "helloMaven";
- }
- public static void main(String[] args) {
- HelloMaven helloMaven = new HelloMaven();
- System.out.println(helloMaven.helloMaven());
- }
- }
修改后的pom.xml文件如下
- <?xml version="1.0" encoding="UTF-8"?>
- <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/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.mycom.hellomaven</groupId>
- <artifactId>hello-maven</artifactId>
- <version>1.0</version>
- </project>
最后我們使用IntelliJ IDEA來用Maven編譯我們的代碼,打開Maven Projects菜單,如圖,選中clean、compile並右鍵點擊Run 'hello-maven[clean,compile]'按鈕即可

控制台輸入結果如下
- D:\resources\opensource\jdk1.6.0_31\bin\java -Dclassworlds.conf=D:\apache-maven-3.0.4\bin\m2.conf -Dmaven.home=D:\apache-maven-3.0.4 -Didea.launcher.port=7533 "-Didea.launcher.bin.path=D:\IntelliJ IDEA 11.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\apache-maven-3.0.4\boot\plexus-classworlds-2.4.jar;D:\IntelliJ IDEA 11.1\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher --no-plugin-registry --fail-fast --no-plugin-updates --strict-checksums --update-snapshots -f D:\projects\HelloMaven\pom.xml clean compile
- [WARNING] Command line option -npu is deprecated and will be removed in future Maven versions.
- [WARNING] Command line option -npr is deprecated and will be removed in future Maven versions.
- [INFO] Scanning for projects...
- [INFO]
- [INFO] ------------------------------------------------------------------------
- [INFO] Building hello-maven 1.0
- [INFO] ------------------------------------------------------------------------
- [INFO]
- [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ hello-maven ---
- [INFO] Deleting D:\projects\HelloMaven\target
- [INFO]
- [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ hello-maven ---
- [debug] execute contextualize
- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
- [INFO] skip non existing resourceDirectory D:\projects\HelloMaven\src\main\resources
- [INFO]
- [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ hello-maven ---
- [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
- [INFO] Compiling 1 source file to D:\projects\HelloMaven\target\classes
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 2.018s
- [INFO] Finished at: Wed Apr 18 23:10:47 CST 2012
- [INFO] Final Memory: 5M/15M
- [INFO] ------------------------------------------------------------------------
- Process finished with exit code 0
根據輸出結果我們看到,clean命令讓Maven先清理target目錄,Maven一般認為項目的輸出目錄為target,然后執行resource任務,現在為定義項目資源,所以暫時略過,最后執行編譯任務!
從Archetype創建Maven項目
由於上一篇文件太過久遠,本人的系統也已經從上一篇中的Windows 7 換成Windows 8,IntelliJ IDEA 也已經從11換成了 IntelliJ IDEA 12,因此可能有些界面和結構可能不太一樣。
進入主題,Archetype是什么呢,中文翻譯是原型的意思,顧名思義,有了Archetype我們就可以利用它快速的生成項目的骨架,當然是符合Maven規范的骨架。
首先我們打開IntelliJ IDEA 然后新建一個項目(New Project),選擇Maven Module,然后輸入項目名稱mavenDemo,如下圖
填好項目名稱后點擊下一步(Next),勾選 Create from Archetype選項,既可選擇列表中提供的Archetype來創建項目
我認為多數情況下上圖提供能的列表中都沒有提供我們想要的Archetype,這時我們可以選擇Add archetype選項來添加其他的Archetype項目
這里我選擇maven-archetype-quick這個Archetype來構建項目的骨架,然后下一步(Next),我們可以在這里設置我們項目的groupId,artifactId等信息,然后點擊完成(Finish)
然后IntelliJ IDEA就會根據我們提供的信息調用Archetype插件為我們創建項目的基礎骨架
控制台輸出的結果:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
D:\code\Java\jdk1.6.0_10\bin\java -Dmaven.home=D:\code\Tools\apache-maven-3.0.5 -Dclassworlds.conf=D:\code\Tools\apache-maven-3.0.5\bin\m2.conf -Dfile.encoding=UTF-8 -classpath D:\code\Tools\apache-maven-3.0.5\boot\plexus-classworlds-2.4.jar org.codehaus.classworlds.Launcher --fail-fast --strict-checksums -DinteractiveMode=false -DgroupId=mavenDemo -DartifactId=mavenDemo -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=RELEASE org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] Archetype repository missing. Using the one from [org.apache.maven.archetypes:maven-archetype-quickstart:1.1] found in catalog remote
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/maven-metadata.xml
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/maven-metadata.xml (531 B at 0.7 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.1/maven-archetype-quickstart-1.1.jar (7 KB at 13.7 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1.1/maven-archetype-quickstart-1.1.pom (2 KB at 4.3 KB/sec)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: mavenDemo
[INFO] Parameter: packageName, Value: mavenDemo
[INFO] Parameter: package, Value: mavenDemo
[INFO] Parameter: artifactId, Value: mavenDemo
[INFO] Parameter: basedir, Value: C:\Users\yang\AppData\Local\Temp\archetype4249856445508268879tmp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\Users\yang\AppData\Local\Temp\archetype4249856445508268879tmp\mavenDemo
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.929s
[INFO] Finished at: Wed May 22 13:53:49 CST 2013
[INFO] Final Memory: 5M/10M
[INFO] ------------------------------------------------------------------------
[INFO] Maven execution finished
|
創建完成后的結構如下,自動為我們創建了項目骨架還提供了App和AppTest測試類
到目前為止,我們已經學會了通過IntelliJ IDEA創建普通Maven項目和Archetype項目,各位可以多找一些Archetype來試試,maven-archetype-quickstart只是一個最簡單的例子,沒多大的實用價值,當我們需要使用某一框架來構建我們的項目時候,如果恰好也提供了Archetype的話,對我們來說是很有用的,甚至可做到即開即用。
導入Maven項目
在IntelliJ中導入本地的Maven項目有兩種方式:
Open Project
如果我們選擇這種方式導入,在彈出的對話框中選擇項目對應的pom文件即可,如果項目中包含多個模塊,要導入其中的一個模塊,選擇模塊對應的pom文件即可,選擇好后IntelliJ會自動解析出項目的結構,分析依賴等等
Import Project
如果選擇這種方式導入,與Open Project方式類似,唯一的區別是,你選擇了對應的pom文件后,會有一系列的設置,比如設置項目名稱,項目路徑,還有一些Maven對應的參數等等。如下圖
如果我們的項目在版本控制工具中,如svn,那怎么導入呢,目前筆者沒找到提供有從SCM導人的方式,直接從svn檢出項目即可,因為如果項目有pom文件IntelliJ會自動解析的,其實和SCM導入差不多,我認為這樣更加方便,因為如果你導出的項目有maven文件就會加入maven 模塊,如果有spring文件,就會加入spring模塊,相當方便。
執行Maven命令
IntelliJ最右側的Maven projects 標簽中對每個項目都內置很多常用的一些Maven命令,如下圖
如果我們想通過IntelliJ在項目中執行Maven命令該怎么辦呢?最簡單的方式就是選中一個內置的命令,然后右鍵選擇Create'xxx[xxx]'... ,然后接先來在Command line中輸入你想要執行的命令,點擊Ok即可保存。
緊接着工具欄中會出現你剛才保存的那條命令,然后選擇旁邊的運行或調試按鈕即可執行剛才保存的命令。
當然你也可以修改,點擊那條命令,然后選擇Edit Configurations即可。
依賴管理
如果我們要查看項目中依賴了哪些第三方jar包,在Maven projects中的Dependencies下可以很清楚的看到,還可以右鍵Dependencies顯示依賴關系圖,很是方便
如果要添加新的依賴也很簡單,開打Project Structure - Libraries,然后選擇加號From Maven,在彈出的對話框中輸入你要添加的依賴的關鍵字,比如spring,最后點擊放大鏡搜索。
等一會兒下拉列表中就會列出相關的搜索到的相關信息。。最后下面還有兩個選項選擇是否下載源文件和javadoc。
這種方式唯一不好的地方就是會把jar文件下到項目的Lib中去,如果不想下載到Lib中,只有手動在pom文件中添加依賴信息,不管你是添加groupId,還是artifactId等,IntelliJ都回給出智能的提示,非常方便。












