Maven官網
Maven搜索庫
一.Maven簡介
maven是一個Apache下的一個純Java開發的開源項目
定義:
Maven是一個項目管理工具,它包含了一個項目對象模型,一組標準集合,一個項目生命週期,一個依賴管理系統,和用來運行定義在生命週期階段中插件目標的工具。
(1)Maven能解決什麼問題:
通俗的講:我們知道,項目開發不就僅僅是寫寫代碼而已,期間會伴隨着各種比不可少的事情要做,下面列舉幾個例子:
- 我們需要引用各種jar包,尤其是比較大的工程,引用的jar包往往有幾十個乃至上百個,每用到一種jar包,都需要手動引入工程目錄,而且經常遇到各種讓人抓狂的jar包衝突,版本衝突。
- 我們寫好的java文件,需要通過javac編譯成class文件才能交給JVM運行。這項工作可以由各種集成開發工具幫我們完成 Eclipse、IDEA 等都可以將代碼即時編譯。
- 世界上沒有不存在 bug 的代碼,因此寫完了代碼,我們還要寫一些單元測試,然後一個個的運行來檢驗代碼質量。
- 再優雅的代碼也是要出來賣的。我們後面還需要把代碼與各種配置文件、資源整合到一起,進行打包。如果是 web 項目,還需要將之發佈到服務器 。
如果現在有一種工具,可以把你從上面的繁瑣工作中解放出來,能幫你構建工程,管理 jar包,編譯代碼,還能幫你自動運行單元測試,打包,生成報表,甚至能幫你部署項目,生成 Web 站點,你會用嗎? Maven 就可以解決上面所提到的這些問題。
(2)Maven的兩個核心功能
依賴管理:
* 傳統的 WEB 工程中,我們必須將工程所依賴的 jar 包複製到工程中,導致了工程的變得很大。
* maven的 WEB 工程中不直接將jar包導入到工程中,而是通過在 pom.xml 文件中添加所需jar包的座標。項目運行時,通過讀取座標到一個專門用於“存放jar包倉庫"(Maven倉庫)找到相應的jar包。
倉庫如何存放jar包?
(3)項目構建:
二.Maven安裝和使用
(1)Maven下載和安裝
下載:
Maven官網下載地址 :http://maven.apache.org/download.cgi
安裝:
Maven使用java語言開發的,解壓即可運行
注意:maven依賴 JAVA_HOME
目錄:
* bin:存放了 maven 的命令,比如我們前面用到的 mvn tomcat7:run* boot:存放了一些 maven 本身的引導程序,如類加載器等* conf:存放了 maven 的一些配置文件,如 setting.xml 文件* lib:存放了 maven 本身運行所需的一些 jar 包
jdk環境變量配置:
環境變量
MAVEN_HOME: maven安裝目錄
path: %MAVEN_HOME%\bin
Maven軟件版本測試:
三.Maven倉庫
(1)Maven倉庫分類:
1. 本地倉庫
項目通過jar座標,先從本地倉庫找對應jar包,如果找不到會從遠程倉庫(互聯網)去下載 jar 包,保存在本地倉庫(在程序員的電腦 上),第二次不需要從遠程倉庫去下載。
2. 遠程倉庫
1 中央倉庫
由專業團隊(maven團隊)統一維護。
中央倉庫的地址:http://repo1.maven.org/maven2/在maven軟件中內置一個遠程倉庫地址http://repo1.maven.org/maven2 ,它是中央倉庫,服務於整個互聯網,它是由Maven團隊自己維護,裏面存儲了非常全的jar包,它包含了世界上大部分流行的開源項目構件。2 私服
架設在公司局域網內,提供給內部的人員使用。私服是一種特殊的遠程倉庫,其內容是來自於其他的遠程倉庫,一般架設在局域網內,提供給一個組織的人員使用。當Maven需要下載依賴時,從私服請求,如果私服上不存在該依賴,則從其他遠程倉庫下載,同時緩存在私服上,提供給其他人使用。如果項目中的一些內部模塊,無法發佈到外部遠程倉庫中,也可發佈在私服上,提供給項目中的其他人員使用。3第三方倉庫
Maven 倉庫默認中央倉庫在國外且只有一個, 國內使用難免很慢,我們可以更換爲第三方公共庫,例如:阿里雲鏡像
依賴尋找流程:
本地倉庫:
(2)Maven本地倉庫的配置:
1. 將Maven下載好的倉庫 解壓到非中文及特殊符號目錄下
2. 修改 maven的安裝目錄/conf/settings.xml 文件的標籤
<localRepository>本地倉庫地址</localRepository>
指定自定義本地倉庫
(3)Maven倉庫國內鏡像的配置
修改 maven 根目錄下的 conf 文件夾中的 setting.xml 文件,在 mirrors 節點上,添加內容如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
(4)全局setting與用戶setting
四:Maven座標和依賴:
groupId:定義當前Maven項目名稱artifactId:定義項目模塊version:定義當前項目的當前版本
<!--當前項目座標-->
<groupId>com.wsl</groupId>
<artifactId>maven_helloword</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 依賴關係 -->
<dependencies>
<!-- 此項目運行使用junit,所以此項目依賴junit -->
<dependency>
<!-- junit的項目名稱 -->
<groupId>junit</groupId>
<!-- junit的模塊名稱 -->
<artifactId>junit</artifactId>
<!-- junit版本 -->
<version>4.12</version>
<!-- 依賴範圍:單元測試時使用junit -->
<scope>test</scope>
</dependency>
</dependencies>
五.Maven工程結構:
傳統java工程遇到的問題:
Maven項目結構:
* java項目
java工程名(項目名)
|-- src目錄
|-- main目錄(主幹代碼)
|-- java目錄(java代碼)
|-- resources目錄(配置文件)
|-- test目錄(測試代碼)
|-- java目錄(java代碼)
|-- resources目錄(配置文件)
|-- pom.xml(maven工程核心配置文件)
|-- target目錄(存放編譯後的class文件.....)
* web項目【重點】
web工程名(項目名)
|-- src目錄
|-- main目錄(主幹代碼)
|-- java目錄(java代碼)
|-- resources目錄(配置文件)
|-- webapp目錄(頁面資源)
|-- WEB-INF
|-- web.xml(web工程核心配置文件)
|-- index.jsp
|-- css、js、img..
|-- test目錄(測試代碼)
|-- java目錄(java代碼)
|-- resources目錄(配置文件)
|-- pom.xml(maven工程核心配置文件)
|-- target目錄(存放編譯後的class文件.....)
六.Maven生命週期和插件:
(1)Maven常用命令和插件:
我們可以在 cmd 中通過一系列的 maven 命令,來對我們的工程進行編譯、測試、打包、安裝、部署。
1)clean
maven工程的清理命令,執行clean會刪除target目錄及內容。
2)compile
maven工程的編譯命令,作用是將 src/main/java 下的文件編譯爲class文件輸出到target目錄下。
3)test
maven工程的測試命令,作用是執行 src/test/java 下單元測試類,並編譯爲class文件。
4)package
maven工程的打包命令,對於java工程執行package打成jar包,對於web工程打成war包。
注意:爲什麼maven_hello是war包而不是jar包呢?
5)install
maven工程的安裝命令,執行install將mave工程打成jar包或war包,併發布到本地倉庫。
6)deploy
maven工程部署命令,將jar或war包部署(上傳)到私服中。
(2)生命週期:
maven 對項目構建過程分爲“三套相互獨立的”生命週期,這三套生命週期分別是:
1. Clean Lifecycle(清理生命週期)
在進行真正的構建之前進行一些清理工作。
命令:clean
2. Default Lifecycle(默認生命週期)
構建的核心部分,編譯,測試,打包,部署等等。
命令: compile test package install deploy
3. Site Lifecycle(站點生命週期)
生成項目報告,站點,發佈站點。
命令: site
* 在同一個生命週期中的命令,執行後面的命令,前面的命令自動執行
- pre-clean:執行一些需要在clean之前完成的工作
- clean:移除所有上一次構建生成的文件
- post-clean:執行一些需要在clean之後立刻完成的工作
site生命週期:
- pre-site:執行一些需要在生成站點文檔之前完成的工作
- site:生成項目的站點文檔
- post-site: 執行一些需要在生成站點文檔之後完成的工作,並且爲部署做準備
- site-deploy:將生成的站點文檔部署到特定的服務器上
(3)Maven概念模型:
<!-- 依賴關係 -->
<dependencies>
<!-- 此項目運行使用junit,所以此項目依賴junit -->
<dependency>
<!-- junit的項目名稱 -->
<groupId>junit</groupId>
<!-- junit的模塊名稱 -->
<artifactId>junit</artifactId>
<!-- junit版本 -->
<version>4.12</version>
<!-- 依賴範圍:單元測試時使用junit -->
<scope>test</scope>
</dependency>
</dependencies>
七.IDEA創建Maven工程
(1)IDEA配置本地Maven環境(全局配置)
如果我們在IDEA創建maven工程默認從互聯網在下載一個骨架(但是若電腦沒有聯網,就會卡頓一段時間,再使用本地骨架),我們可以直接指定IDEA查找本地骨架,效率提升
-DarchetypeCatalog=internal -Dfile.encoding=GB2312
初始化工作空間:
設置jdk環境:
統一編碼環境
方法之間加入一條分割線:
(2)創建一個全新的工作空間(基於Maven結構)
(1)IDEA創建工程
java工程:
手動創建test測試配置文件目錄
指定maven環境的jdk版本和字符集
<build>
<plugins>
<!-- 設置編譯版本爲1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
maven工程命令操作:
如何導入依賴:
maven的搜索倉庫:https://mvnrepository.com/
web工程
idea創建web工程,我們需要安裝一個插件:
安裝完成後,重啓idea工具
注意:
有些時候創建maven之後,文件夾不變顏色,需要手動刷新:
發佈web工程:
idea使用外置tomcat運行
idea使用maven內置tomcat插件
<build>
<plugins>
<!-- 設置編譯版本爲1.8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
雙擊啓動
命令啓動
(3)依賴管理: