Maven 與 IntelliJ IDEA 的完美結(jié)合

1. 什么是 Maven,為什么要使用 Maven 而不是 Ant

Maven簡單來說是一個項目管理工具,被認為是Ant的替代品或者繼任者。事實上Maven的功能要遠遠超出Ant,它不僅僅提供編譯的腳本,更是在整 個項目周期中提供測試,發(fā)布,文檔生成等功能,并且有著獨特的依賴性管理方法。但是強大的功能的代價就是復雜的使用方法,第一次使用Maven往往需要將 近半個小時的時間(國內(nèi)網(wǎng)速)來下載一個本地的依賴庫,這無疑會使很多開發(fā)人員“知難而退”。雖然廣受詬病,一個不爭的事實就是Maven逐漸代替了 Ant,使用Maven也成了Java開發(fā)人員的一個必要技能。

2. IntelliJ IDEA 與 Eclipse

在Java的世界里,Eclipse毋庸置疑是IDE中的王者,IntelliJ IDEA和NetBeans都只能生活在Eclipse的光環(huán)下。Eclipse的強大已經(jīng)不用我多說了,但其實IntelliJ IDEA也是一個相當優(yōu)秀的IDE,尤其體現(xiàn)在它的智能上。它的一個針對.Net的Clone產(chǎn)品ReSharper已經(jīng)被越來越多的C#開發(fā)者所接受。 IntelliJ IDEA提供了大量的智能規(guī)則來協(xié)助開發(fā)者,類似代碼補全,用法的轉(zhuǎn)換,格式的提示等等,當你習慣以后,你就會對那個小燈泡愛不釋手。

3. 選擇 Maven + IntelliJ IDEA 的理由

之所以要選擇IntelliJ IDEA,是因為Maven+Eclipse實在太難用了。Eclipse有兩個Maven插件 m2eclipse 和 Eclipse IAM。但是由于Eclipse和Maven設(shè)計上的矛盾,這兩個插件可能都達不到你想要的效果。m2eclipse 會把你所有類型的項目都視為Maven類型項目,這對于一個單純的Java項目或許可以,對于一個JEE或者WEB項目都是一場災難。Eclipse IAM 并不會改變你的項目類型,但是他提供的功能也就僅僅限于編輯和運行POM文件了,甚至連依賴性都管理不了。相比之下,如果你非要用Eclipse的話我還 是推薦你使用Eclipse IAM。Eclipse想要完美的支持Maven恐怕需要在底層設(shè)計上做一些改變,無論是代碼規(guī)范,項目結(jié)構(gòu)規(guī)范和依賴性管理上,都有著不可調(diào)和的矛盾。 顯然,在這方面IntelliJ IDEA做的要好的多,以至于你很難說出對它的不滿。

4. Maven + IntelliJ IDEA 的優(yōu)勢

一切都是Module:
IntelliJ IDEA借鑒的Maven的概念,不在采取Eclipse里Project的概念,一切都是Module。無論是否使用Maven,你的項目都是一個獨立 的Module。并且你可以混搭使用Maven Module和普通的Java Module,兩者可以和諧共存。
支持Multi-module:
可以說Maven的項目結(jié)構(gòu)設(shè)計是非常嚴格的,現(xiàn)實應用中你必須用到Parent-Child的模式。Eclipse由于不支持在一個Project上建 立Sub-Project,因此無論如何目前都不能實現(xiàn)。IntelliJ IDEA可以完美的實現(xiàn)這個設(shè)計,并且無論是Module屬性里,還是彼此的依賴性上都不會出現(xiàn)問題。
更方便的生命周期操作:
比起Eclipse通通放進右鍵菜單的行為,IntelliJ IDEA有著單獨的窗口可以完成Maven的操作。你可以針對不同Module進行 Clean Compile Package Install等操作,各個Plug-in的操作也一清二楚。
完美的依賴性管理:
由于Maven會把所有依賴的包放在本機的一個目錄下,所以實際上是脫離Project本身存在的。IntelliJ IDEA引入了一個External Library的概念,所有的Maven依賴性都會放在這里,和項目自帶的庫區(qū)分開。并且Module之間會智能的判斷,你不需要Maven Install來進行引用代碼的更新。
動態(tài)更新:
每當Maven相關(guān)的設(shè)置更改時,例如修改了pom的依賴性,添加刪除Module,IntelliJ IDEA會提示你進行更新。這種更新實際上就是運行了Maven,所以你不許要手動運行Maven Compile來進行更新,也不會像Eclipse里遇到莫名其妙的問題。

5. 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環(huán)境變量M2_HOME為你解壓的目錄,如下圖新建M2_HOME變量并追加到Path后面:

image
image

如果要在CMD控制臺運行Maven命令的話,還需要配置Jdk環(huán)境變量,因為我接下來的操作都是基于IntelliJ IDEA,所以就不用配置JDK環(huán)境變量。

6. Maven 與IntelliJ IDEA完美使用(基于IntelliJ IDEA 12)

打開IntelliJ IDEA,新建一個Maven項目,如下圖,項目名稱為mymaven


image

選擇Maven模版


image

創(chuàng)建過程中,配置Maven主目錄
image

image

創(chuàng)建好后的目錄結(jié)構(gòu)如下圖,IDEA創(chuàng)建了src/main/resources(自動創(chuàng)建)、src/main/java(手動創(chuàng)建)、src/main/test(手動創(chuàng)建)、以及pom.xml文件(自動創(chuàng)建)


image

按照Maven約定,項目的主目錄位于src/main/resources、src/main/java中,測試目錄位于src/main/test 中,所以我們在最終打包項目的時候,只包含主目錄代碼,不會包含測試目錄里的代碼,而測試目錄里的代碼只會在測試時候用到。
最后pom.xml這個文件是我們Maven項目的核心文件,POM(Project Object Model,項目對象模型)定義了項目的基本信息,用于描述項目如何構(gòu)建,聲明項目依賴。
image

project:是xml文件的根元素,我們主要關(guān)心根元素下的子元素 modelVersion:定義了當前POM模型的版本,Maven 2 或Maven 3 只能是4.0.0 groupId:定義了項目屬于哪個組,一般來說這個網(wǎng)網(wǎng)和公司或組織關(guān)聯(lián),比如說,你所在的公司為mycom.那就應該定義為com.mycom.mymaven,mymaven為項目名稱 artifactId:定 義了當前Maven項目在組中的唯一id,例如HelloMaven這個項目,我則把他定義為hello-maven,還例如spring項目,他的 groupId為org.springframework,對于content項目來說artifactId則為spring-content,web項 目則為spring-web
最后我們使用IntelliJ IDEA來用Maven編譯我們的代碼,打開Maven Projects菜單,如圖,選中clean、compile并右鍵點擊Run 'hello-maven[clean,compile]'按鈕即可。
image
image

image

根據(jù)輸出結(jié)果我們看到,clean命令讓Maven先清理target目錄,Maven一般認為項目的輸出目錄為target,然后執(zhí)行resource任務,現(xiàn)在為定義項目資源,所以暫時略過,最后執(zhí)行編譯任務!

原文地址:http://my.oschina.net/xianggao/blog/97782?p=2#comments1.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,941評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • 首先,來點干貨就是如何把我們之前在Eclipse環(huán)境開發(fā)的項目,如何導入到Intellij IDE中,并且讓其可以...
    胖先森閱讀 3,279評論 6 16
  • Maven編譯代碼的相關(guān)命令 第一、main目錄下的主代碼編寫完畢后,使用Maven進行編譯,在項目根目錄下運行命...
    加油小杜閱讀 1,231評論 0 2
  • 你信命嗎?我信。以前,雖然我感情從未出現(xiàn)第三者,可我依然會狠狠咒罵第三者,直到那晚,我發(fā)現(xiàn),我竟成了別人感情的第三...
    廉子閱讀 724評論 6 12