相對(duì)于傳統(tǒng)的項(xiàng)目,Maven 下管理和構(gòu)建的項(xiàng)目真的非常好用和簡(jiǎn)單,所以這里也強(qiáng)調(diào)下,盡量使用此類工具進(jìn)行項(xiàng)目構(gòu)建。
學(xué)習(xí)本講還有一個(gè)前提:你必須會(huì) Maven 相關(guān)知識(shí)點(diǎn),Maven 相關(guān)知識(shí)點(diǎn)是不在本專題的講解范圍里面的,所以請(qǐng)自己私下進(jìn)行學(xué)習(xí)。如果愿意你也可以看我過去整理的一份視頻(提取碼:wh5g):http://pan.baidu.com/s/1eSovBkI
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-a-maven-setting-1.jpg" alt="Maven 常用設(shè)置介紹" />
- 如上圖標(biāo)注 1 所示,我們可以指定我們本地 Maven 的安裝目錄所在,因?yàn)槲乙呀?jīng)配置了
MAVEN_HOME系統(tǒng)參數(shù),所以直接這樣配置 IntelliJ IDEA 是可以找到的。但是假如你沒有配置的話,這里可以選擇你的 Maven 安裝目錄。- 如上圖標(biāo)注 2 所示,我們還可以指定 Maven 的
settings.xml位置和本地倉(cāng)庫(kù)位置。
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-a-maven-setting-2.jpg" alt="Maven 常用設(shè)置介紹" />
- 如上圖標(biāo)注 1 所示,
Import Maven projects automatically表示 IntelliJ IDEA 會(huì)實(shí)時(shí)監(jiān)控項(xiàng)目的pom.xml文件,進(jìn)行項(xiàng)目變動(dòng)設(shè)置。- 如上圖標(biāo)注 2 所示,在 Maven 導(dǎo)入依賴包的時(shí)候是否自動(dòng)下載源碼和文檔。默認(rèn)是沒有勾選的,也不建議勾選,原因是這樣可以加快項(xiàng)目從外網(wǎng)導(dǎo)入依賴包的速度,如果我們需要源碼和文檔的時(shí)候我們到時(shí)候再針對(duì)某個(gè)依賴包進(jìn)行聯(lián)網(wǎng)下載即可。IntelliJ IDEA 支持直接從公網(wǎng)下載源碼和文檔的。
- 如上圖標(biāo)注 3 所示,可以設(shè)置導(dǎo)入的 VM 參數(shù)。一般這個(gè)都不需要主動(dòng)改,除非項(xiàng)目真的導(dǎo)入太慢了我們?cè)僭龃蟠藚?shù)。
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-b-maven-hello-world-project-1.gif" alt="Maven 骨架創(chuàng)建 Java Web 項(xiàng)目" />
- 如上圖 Gif 演示,根據(jù)已有的 Maven 骨架進(jìn)行 Java Web 項(xiàng)目創(chuàng)建。其中需要特別注意的是,在創(chuàng)建項(xiàng)目過程中 Maven 會(huì)去外網(wǎng)中央倉(cāng)庫(kù)中下載對(duì)應(yīng)的依賴或是組件,這個(gè)過程根據(jù)自身網(wǎng)絡(luò)環(huán)境決定其快慢。如果出現(xiàn)無法下載的情況請(qǐng)自備 VPN 或者通過修改 Maven 配置文件
settings.xml切換國(guó)內(nèi)的中央倉(cāng)庫(kù)。- 由于我已經(jīng)試過多次了,所以 Gif 演示中我可以快速創(chuàng)建好,但是你那邊不一定是這種情況的。
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-b-maven-hello-world-project-2.gif" alt="Maven 骨架創(chuàng)建 Java Web 項(xiàng)目" />
- 如上圖 Gif 演示,配置好項(xiàng)目之后,啟動(dòng) Tomcat 容器可以良好運(yùn)行。
我們已經(jīng)了解了如何通過 Maven 骨架生成一個(gè)最簡(jiǎn)單的 Java Web 項(xiàng)目,可是我們還是使用了 IntelliJ IDEA 的項(xiàng)目管理功能進(jìn)行 Maven 項(xiàng)目的管理和構(gòu)建。一般 Maven 的項(xiàng)目我們都可以脫離 IntelliJ IDEA 的項(xiàng)目配置功能進(jìn)行獨(dú)立的管理和構(gòu)建的,接下來我們就講如何通過 IntelliJ IDEA 提供的 Maven 管理工具進(jìn)行項(xiàng)目的管理和構(gòu)建。
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-c-maven-component-1.jpg" alt="Maven 組件界面介紹" />
如上圖標(biāo)注 1 所示,為常用的 Maven 工具欄,其中最常用的有:
- 第一個(gè)按鈕:
Reimport All Maven Projects表示根據(jù)pom.xml重新載入項(xiàng)目。一般當(dāng)我們?cè)?pom.xml添加了依賴包或是插件的時(shí)候,發(fā)現(xiàn)標(biāo)注 4 的依賴區(qū)中沒有看到最新寫的依賴的話,可以嘗試點(diǎn)擊此按鈕進(jìn)行項(xiàng)目的重新載入。- 第六個(gè)按鈕:
Execute Maven Goal彈出可執(zhí)行的 Maven 命令的輸入框。有些情況下我們需要通過書寫某些執(zhí)行命令來構(gòu)建項(xiàng)目,就可以通過此按鈕。- 第九個(gè)按鈕:
Show Dependencies顯示項(xiàng)目依賴的結(jié)構(gòu)圖,可以方便我們直觀項(xiàng)目的依賴包情況。這個(gè)功能有些具體的操作下面會(huì)專門進(jìn)行講解。如上圖標(biāo)注 2 所示,常用的 Maven 生命周期的命令,通過雙擊對(duì)應(yīng)的命令來執(zhí)行項(xiàng)目編譯、打包、部署等操作。
如上圖標(biāo)注 3 所示,為我們?cè)?
pom.xml中配置的插件列表,方便調(diào)用插件。如上圖標(biāo)注 4 所示,為我們?cè)?
pom.xml中配置的依賴包列表。- 如上圖標(biāo)注 5 所示,為常見的 Java Web 在 Maven 下的一個(gè)項(xiàng)目結(jié)構(gòu)。
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-d-maven-tomcat-run-1.gif" alt="Maven 的 Tomcat 插件運(yùn)行項(xiàng)目" />
- 如上圖 Gif 演示,通過 Maven 生命周期的命令進(jìn)行編譯和打包,及用 Maven 的 Tomcat 插件運(yùn)行項(xiàng)目。
- 雖然我們可以通過 Maven 組件進(jìn)行項(xiàng)目的管理,但是這并不等同于我們可以完全拋棄 IntelliJ IDEA 的項(xiàng)目設(shè)置,比如我們?cè)?
pom.xml文件中設(shè)置了 JDK 編譯版本是 1.7,但是在項(xiàng)目的Ctrl + Shift + Alt + S配置中,我們配置的 JDK 是 1.8,那即使我們用 Maven 的編譯工具或命令進(jìn)行編譯也是會(huì)調(diào)用 1.8的。還有即使我們?cè)?Ctrl + Shift + Alt + S配置中沒有配置 Artifacts,在我們運(yùn)行 Maven 的 Tomcat 插件的時(shí)候也會(huì)自動(dòng)幫我們生成的。
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-e-maven-dependent-exclude-1.jpg" alt="Maven 快速排查依賴包沖突" />
- 如上圖箭頭所示,點(diǎn)擊此按鈕會(huì)出現(xiàn)左邊的項(xiàng)目依賴結(jié)構(gòu)圖,通過此圖我們可以很好的觀察項(xiàng)目的依賴依賴情況。
- 如上圖標(biāo)注 1 所示,我們可以直接在依賴結(jié)構(gòu)圖上編輯依賴,常用的就是此排除功能。
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/images/xxii-e-maven-dependent-exclude-2.jpg" alt="Maven 快速排查依賴包沖突" />
- 如上圖描述,一般我們?cè)诔霈F(xiàn)紅色線的時(shí)候是都要進(jìn)行排除的,防止出現(xiàn)因?yàn)榘姹静煌囊蕾嚢斐纱a無法編譯。