1.Maven的簡介
1.1 什么是maven
是apache下的一個開源項目,是純java開發,並且只是用來管理java項目的。Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標准集合,一個項目生命周期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。
1.2 什么是依賴管理
一個java項目需要外部的第三方jar包來進行支持。我們說這個java項目依賴了這些jar包。
依賴管理就是將項目所依賴的jar包按照一定規則進行規范化管理。
1.2.1 傳統項目的依賴管理
傳統的依賴管理就是程序員需要什么jar包,去網上進行下載,然后手動添加到工程中。
缺點:
(1) jar包從網上不好找
(2) jar包沒有進行統一管理,容易造成jar包重復及版本沖突
(3) jar包全部添加到工程中,造成工程過大
1.2.2 maven項目的依賴管理
maven項目有一個文件叫pom.xml。我們通過在此文件中配置jar包的坐標即可將jar包引入到工程中。Jar包的坐標可從maven倉庫中獲取。
好處:
(1)通過pom配置來引入jar包,避免了jar包的版本沖突。
(2)Maven團隊維護了一個jar包倉庫,十分全,避免了去網上尋找jar包的尷尬,節省時間。
1.3 什么是項目構建
項目構建是一個項目從編寫源代碼到編譯,測試,運行,打包,部署,運行的過程。
1.3.1 傳統項目構建過程
(1) 在eclipse中新建一個WEB工程。
(2) 進行編碼及編寫配置文件
(3) 對源代碼進行編譯運行,生成class文件
(4) 打成war包,部署至tomcat
1.3.2 Maven項目構建過程
一個命令tomcat:run完成對項目的構建。
1.4 Maven好處
(1) 一步構建:一個命令即可啟動。
(2) 依賴管理:對jar包統一管理,避免沖突等問題
(3) 跨平台:可在windows及linux下運行
(4) 有利於提高大型項目的團隊開發效率
(5) 越來越多的公司使用maven
2.Maven的安裝配置
2.1 下載安裝
下載地址:http://maven.apache.org/download.cgi
直接解壓到一個沒有中文沒有空格的文件夾里解壓后的目錄如下:
bin目錄:maven的運行文件。mvn.cmd正常運行mvn,mvnDebug.cmd已debug方式運行maven。
boot目錄:maven運行需要類加載器。
conf目錄:maven的配置文件目錄,核心配置文件為其中的setting.xml。
lib目錄:maven所需要的jar包。
2.2 Maven環境變量配置
0、注意:配置maven之前,要配置jdk,確保配置jdk的環境變量
1、maven3.3.9這個版本所需的jdk版本必須要1.7以上
2、最終要運行的是maven軟件中bin目錄的mvn命令
3、系統變量中添加
環境變量的名稱:MAVEN_HOME
變量值:就是maven解壓的目錄C:\Users\hanqing\Downloads\apache-maven-3.6.0
4、把MAVEN_HOME添加到path里
5、驗證maven是否配置成功:
打開dos窗口 輸入: mvn –v
顯示版本號信息即為成功。
2.3 Maven倉庫
2.3.1 maven倉庫的概述
maven倉庫用來存儲jar包。maven項目都是從倉庫中獲取jar包。maven倉庫分三種:本地倉庫,遠程倉庫,中央倉庫。
本地倉庫:用來存儲從遠程倉庫及中央倉庫下載的jar包,自己來維護。項目使用的jar包優先從本地倉庫獲取。本地倉庫的默認位置在${user.home}/.m2/repository。${user.home}表示用戶所在的位置。
遠程倉庫:如果本地倉庫沒有所需要的jar包,默認去遠程倉庫下載。遠程倉庫由公司來進行維護又可稱為私服。
中央倉庫:中央倉庫由maven團隊來進行維護,服務於整個互聯網。其倉庫中存儲大量的jar包。
2.3.2 修改本地倉庫位置
本地倉庫的配置在settings.xml文件中修改。
2.3.3 三種倉庫的關系
本地項目需要jar包,先從本地倉庫中獲取,如果本地倉庫中沒有,則從私服中獲取,如果私服沒有,則從中央倉庫獲取。獲取到后,本地倉庫及遠程倉庫各存儲一份。如果沒有遠程倉庫,本地倉庫則直接從中央倉庫獲取,然后在本地倉庫存儲一份。
3.目錄,命令及生命周期
3.1 Maven的目錄結構
maven工程具有一定的目錄規范,如下:
src/main/java -------------------存放項目的.java文件
src/main/resources -----------存放項目資源文件,如一些配置文件
src/test/java --------------------存放所有單元測試的java文件,如junit測試類。
src/test/resource --------------測試資源文件
target------------------------------項目輸出位置,編譯后的class文件會輸出到此目錄
pom.xml--------------------------maven項目的核心配置文件
3.2 Maven的常用命令
3.2.1 clean
clean是清除命令,執行clean會刪除target下文件。
cmd下執行 mvn clean
3.2.2 compile
compile用來將src/main/java下的文件編譯為class文件,並輸出到target中。
cmd下執行 mvn compile
3.2.3 test
test 用來將src/main/test下的文件進行編譯,同時執行一次。
cmd下執行 mvn test
3.2.4 package
打包,將項目進行打包,如果是jar打包為jar,war打包為war。
3.2.5 install
把項目打包成war包或jar包發布到本地倉庫
3.2.6 tomcat:run
一鍵啟動
3.3 Maven的生命周期
3.3.1 maven的三種生命周期
maven對項目的構建分為三套相互獨立的生命周期。
cleanLifecycle:在項目構建前,先進行一些清理工作。
defaultLifecycle:構建的核心部分,編譯,測試,打包,部署。
siteLifecycle:生成項目報告,站點,發布報告。
3.3.2 maven生命周期的階段
maven的每個生命周期都有很多階段,每個階段對應一個執行命令。
1、clean生命周期:清理項目,包含三個phase。
1)pre-clean:執行清理前需要完成的工作
2)clean:清理上一次構建生成的文件
3)post-clean:執行清理后需要完成的工作
2、default生命周期:構建項目,重要的phase如下。
1)validate:驗證工程是否正確,所有需要的資源是否可用。
2)compile:編譯項目的源代碼。
3)test:使用合適的單元測試框架來測試已編譯的源代碼。這些測試不需要已打包和布署。
4)package:把已編譯的代碼打包成可發布的格式,比如jar。
5)integration-test:如有需要,將包處理和發布到一個能夠進行集成測試的環境。
6)verify:運行所有檢查,驗證包是否有效且達到質量標准。
7)install:把包安裝到maven本地倉庫,可以被其他工程作為依賴來使用。
8)deploy:在集成或者發布環境下執行,將最終版本的包拷貝到遠程的repository,使得其他的開發者或者工程可以共享。
3、site生命周期:建立和發布項目站點,phase如下
1)pre-site:生成項目站點之前需要完成的工作
2)site:生成項目站點文檔
3)post-site:生成項目站點之后需要完成的工作
4)site-deploy:將項目站點發布到服務器
3.3.3 命令與生命周期關系
每個maven命令對應生命周期的某一階段,例如clean命令對應maven的clean階段。test命令對應maven的default階段。
執行命令會自動將該階段以前的命令執行,例如執行clean命令,將自動執行pre-clean命令。
執行某個生命周期某個階段,不會影響生命周期其他階段。
如果要執行多個生命周期的命令,中間用空格隔開,例如mvn clean compile。
4.項目構建
4.1 Maven在eclipse的配置
1、選擇maven軟件,先通過add進行添加
2、加載setting文件,修改默認的本地倉庫地址
4.2 eclipse瀏覽倉庫
展示maven視圖。
在彈出的視圖下,右鍵Local Repository,點擊Rebuild Index。
點擊前方三角號,發現本地倉庫的jar包已經可以看見。
4.3 maven坐標定義
每個maven工程都需要定義本工程的坐標。坐標是maven對jar包的定義。
groupId:項目名稱,定義為組織名加項目名。
artifactId:模塊名稱
version:版本號snapshot為快照版本,非正式版本,release為正式發布版本
packaging:打包方式
jar:打成jar包
war:打成war包
pom:用於maven工程的繼承,通常父工程設置為pom.xml
4.4 eclipse搭建maven工程
1、 新建maven項目
2、調過骨架,如果不跳過骨架選擇創建出的項目目錄是不全的
3、填寫坐標
4、創建工程
5、處理紅色叉號
手動在webapp文件夾下創建一個WEB-INF文件夾,在里面放一個web.xml文件
6、處理編譯版本
在pom.xml中添加如下代碼后右鍵工程在maven中點擊Maven update。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
7、創建一個servlet
修改web.xml,刪除重復的代碼,xmlns=http://java.sun.com/xml/ns/javaee
8、添加jar包
在pom中添加如下代碼:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
會發現jar包已添加到項目中
9、啟動項目
右擊項目---run as –maven build …. 輸入tomcat:run,項目執行
5.依賴管理
5.1 依賴范圍
5.1.1 Compile
編譯(compile)時需要, 測試時需要,運行時需要,打包時需要
5.1.2 Provided
編譯(compile)時需要,測試(test)時也需要 ,運行時不需要,打包時不需要。只有當jdk或容器已提供該依賴后才使用。
5.1.3 Runtime
編譯時不需要,測試時需要,運行時需要,打包時需要
5.1.4 Test
編譯時不需要,測試時需要,運行時不需要,打包也不需要
此為本人學習筆記總結。希望大家能順利入門,學習會maven的簡單使用。