maven,你不得不知道的something!

寫在前面:關於maven,相信對於絕大多數從事java開發的大兄弟們是既熟悉又陌生的。說熟悉呢是因爲我們每天都在使用maven,說陌生呢,可能對於絕大多數人而言,對maven的認知僅僅只停留在使用上,並不清楚maven的工作原理,以及體系結構。下面我會用這篇文章,詳細介紹一下maven的使用及其體系結構。
這篇呢主要介紹下maven安裝,環境的搭建,然後使用idea構建一個maven的簡單的spring項目並運行,然後介紹下maven的一些基本概念:依賴管理,座標,倉庫,生命週期,然後maven的插件等等

1,安裝maven(我們直接去官網下載即可) :
下載地址:http://maven.apache.org/download.cgi
在這裏插入圖片描述
如圖,我們選擇自己需要的版本下載即可。maven不需要安裝,下載zip到本地解壓後即可使用,當然如果需要在cmd環境下使用maven命令,需要配置下maven的環境變量
在這裏插入圖片描述
如圖新增變量MAVEN_HOME或M2_HOME(注意只能叫這兩個名字),配置成本地解壓的maven安裝包路徑,然後將%M2_HOME%\bin;追加到path即可,配置完成後win+r cmd進入dos命令窗口,輸入mvn -version,能正確輸出版本信息即可
在這裏插入圖片描述
環境變量配置完以後我們找到安裝目錄下的setting.xml(D:\software\apache-maven-3.0.5\conf目錄下),配置下我們本地的倉庫(倉庫後面會詳細介紹)
在這裏插入圖片描述

如圖,我將本地的maven倉庫配置成了D:\repo,當然不配置也可以,maven會默認創建一個本地工作倉庫目錄C:\Users\Administrator.m2\repository,不過作爲一個強迫症晚期的鋼鐵直男,我還是戶配置成自己需要的目錄,這樣更多的是爲方便管理我們的倉庫。
如此,本地maven環境的搭建配置就算大功告成了。

2,使用idea構建我們的maven項目(爲什麼是idea,不是eclipse或其他的呢:首先,idea強大的插件功能,對於maven或其他類型項目的構建如gradle等的構建會非常方便,幾乎可以滿足java開發的所有需求。其次,idea逼格高啊!)
file-new-project,然後選maven next
在這裏插入圖片描述
如下,填上對應的項目名稱和模塊名稱即可(後面會介紹什麼是groupid,什麼是artfactid),然後next,一直到finish
在這裏插入圖片描述
如圖,我們便完成了一個mavan項目框架的搭建。
在這裏插入圖片描述
idea默認有自己的maven插件,同時,我們也可以選擇使用自己本地的maven,具體設置爲:file-settings-maven,如圖idea提供了兩個maven版本,我們系統的環境變量配置了一個,這裏我們選我們自己配的maven,好方便使用我們自己的倉庫來管理jar包。
在這裏插入圖片描述

下面我們來夠建一個簡單的spring項目。第一步,如圖在pom.xml中增加spring-context的依賴
在這裏插入圖片描述
如此,項目正確輸出
在這裏插入圖片描述
至此一個maven項目就構建完成了,是不是很簡單呢,而且我們只需要在pom.xml整增加下jar的配置信息,並不需要去關心jar的導入等等,對於開發來說,確實很方便呢。下面我們就來詳細說下maven。

3,Maven簡介(關於maven簡介,我總結精簡瞭如下幾點,至於詳細信息,可參考百度上各大詳解內容)
1)什麼是Maven
Maven是跨平臺的項目管理工具。主要服務魚基於Java平臺的項目構建,依賴管理和項目信息管理。
2)什麼是理想的項目構建
包括如下步驟:清理—>編譯—>測試—>報告—>打包—>部署
高度自動化,跨平臺,可重用的組件,標準化的
3)什麼是依賴?爲什麼要進行依賴管理?
自動下載,統一依賴管理
4)有哪些項目信息
項目名稱描述等,開發人員信息,開發者信息
5)項目構建過程
4,爲什麼使用Maven,對於爲什麼使用maven,我還是用一個對比來說下吧,其中妙處讀者可自行體會
不使用Maven:
1)手工操作較多,編譯、測試、部署等工作都是獨立的,很難一步完成
2)每個人的IDE配置都不同,很容易出現本地代碼換個地方編譯就出錯
使用Maven:
1)擁有約定,知道你的代碼在哪裏,放到哪裏去
2)擁有一個生命週期,例如執行 mvn install就可以自動執行編譯,測試,打包等構建過程
3)只需要定義一個pom.xml,然後把源代碼放到默認目錄,Maven幫你處理其他事情
4)擁有依賴管理,倉庫管理
5,Maven相關概念介紹
1)項目對象模型(POM):可通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具(pom.xml)
2)座標
Maven座標主要組成
groupId:定義當前Maven項目隸屬項目
artifactId:定義實際項目中的一個模塊
version:定義當前項目的當前版本
packaging:定義該項目的打包方式
Maven爲什麼使用座標
Maven世界擁有大量構建,我們需要找一個用來標識
3)依賴管理
a)依賴聲明
在這裏插入圖片描述
b)依賴範圍
依賴範圍scope用來控制依賴和編譯、測試、運行的classpath的關係
compile:默認編譯依賴範圍。對於編譯、測試、運行三種classpath都有效。
test:測試依賴範圍。只對於測試classpath有效。
provided:已提供依賴訪問。對於編譯、測試的classpath有效,但對於運行無效,因爲容器已經提供,例如 servlet-api
runtime:運行時提供。例如jdbc驅動。 在這裏插入圖片描述
4)倉庫管理
何爲Maven倉庫:用來統一存儲所有Maven共享構建的位置就是倉庫
Maven倉庫佈局:根據Maven座標定義每個構建在倉庫中唯一存儲路徑
大致爲:groupId/artifactId/version/artifactId-version.packaging
倉庫的分類
本地倉庫:前面setting.xml中配置的本地倉庫地址,每個用戶只有一個本地倉庫
遠程倉庫
中央倉庫:Maven默認的遠程倉庫:https://mvnrepository.com/tags/maven
私服:是一種特殊的遠程倉庫,它是架設在局域網內的倉庫(後面會詳細介紹私服的搭建,架構師必備技能之一)
鏡像:用來替代中央倉庫,速度一般比中央倉庫
在這裏插入圖片描述
5)生命週期:Maven生命週期就是爲了對所有的構建過程進行抽象和統一,包括項目清理、初始化、編譯、打包、測試、部署等幾乎所有構建步驟
Maven有三套相互獨立的生命週期,分別是clean、default和site。每個生命週期包含一些階段(phase),階段是有順序的,後面的階段依賴於前面的階段。
a)、clean生命週期:清理項目,包含三個phase。
pre-clean:執行清理前需要完成的工作
clean:清理上一次構建生成的文件
post-clean:執行清理後需要完成的工作
b)、default生命週期:構建項目,重要的phase如下。
validate:驗證工程是否正確,所有需要的資源是否可用。
compile:編譯項目的源代碼。
test:使用合適的單元測試框架來測試已編譯的源代碼。這些測試不需要已打包和佈署。
Package:把已編譯的代碼打包成可發佈的格式,比如jar。
integration-test:如有需要,將包處理和發佈到一個能夠進行集成測試的環境。
verify:運行所有檢查,驗證包是否有效且達到質量標準。
install:把包安裝到maven本地倉庫,可以被其他工程作爲依賴來使用。
Deploy:在集成或者發佈環境下執行,將最終版本的包拷貝到遠程的repository,使得其他的開發者或者工程可以共享。
c)、site生命週期:建立和發佈項目站點,phase如下
pre-site:生成項目站點之前需要完成的工作
site:生成項目站點文檔
post-site:生成項目站點之後需要完成的工作
site-deploy:將項目站點發布到服務器
6,maven插件
Maven的核心僅僅定義了抽象的生命週期,具體的任務都是交由插件完成的,每個插件都能實現多個功
能,每個功能就是一個插件目標。Maven的生命週期與插件目標相互綁定,以完成某個具體的構建任
務。例如:compile就是插件maven-compiler-plugin的一個插件目標。
1)jdk編譯插件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.luban.maven</groupId>
<artifactId>Hello</artifactId>

<version>0.0.1-SNAPSHOT</version>
   <build>
		    <plugins>
				   <plugin>
				    		<groupId>org.apache.maven.plugins</groupId>
				   		    <artifactId>maven-compiler-plugin</artifactId>
				    		<version>3.8.0</version>
				    		<configuration>
							   <source>1.8</source>
							    <target>1.8</target>
							    <encoding>UTF-8</encoding>
						    </configuration>
				    </plugin>	
		    </plugins>
    </build>
</project>

2)源碼打包插件
a)解決idea中,創建web項目慢的方式:
在Properties中添加Name:archetypeCatalog和Value:internal,如下圖那樣
也可以在設置中指定Maven-Runne的VM: -DarchetypeCatalog爲internal
b)打包插件pom.xml

 <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-source-plugin</artifactId>
    	<version>2.2.1</version>
    	<executions>
    		<execution>
    			<goals>
    				<goal>jar-no-fork</goal>
    			</goals>
    			<phase>verify</phase>
    		</execution>
    	</executions>
    </plugin>

3)Tomcat插件

	<plugin>
		<groupId>org.apache.tomcat.maven</groupId>
		<artifactId>tomcat7-maven-plugin</artifactId>
		<version>2.1</version>
		<configuration>
			<port>8081</port>
			<server>tomcat7</server>
		</configuration>
	</plugin>

好了,以上就是關於maven的全部內容了,同時歡迎大家糾正和補充,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章