看見大佬們的業務結構溜得飛起,難道你還不心動得想學Maven嗎?

嗎嗎哈哈發表於2020-10-25

一、倘若沒有 maven

當我們新建一個專案,在專案中完成

  1. 比如需要寫一端jdbc程式碼,去讀某張表中的資料。
  2. 使用Spring開發一個簡單的crud。

在這些業務建立時需要匯入很多jar包,或者在建立很多相似的專案時整體架構同樣是相似的,比如需要contextConfiguration.xml、Struts-Config.xml、Hibernate.xml、Properties.xml之類的檔案。這些都是重複的操作,如果我們沒有maven工程就需要在每次業務中完成這些操作。

Maven可以做的事情

  1. jar包管理
  2. 專案的結構和管理

我們來看看百度百科對Maven的解釋

在這裡插入圖片描述

二、Maven的介紹

jar包的管理

我們在使用Maven時應該告訴maven的一些內容:

  1. jar包的下載地址?
  2. 下載完成之後儲存在哪邊?
  3. 具體下載的jar包是什麼?

專案的構建和管理

  1. 在工作結構上進行一些限制和要求
  2. 至少要建立一個自己比較滿意的模板
  3. 對這個模板進行復制

三、下載與安裝

1. 下載

在Maven的官網https://maven.apache.org/download.cgi中下載

在這裡插入圖片描述

2. 安裝

注意:在maven安裝之前,一定要已經安裝了jdk

只需要將maven所在的目錄的bin檔案配置到Path環境變數中,這樣做的目的是在命令列的任意目錄下,都可以使用“maven”命令操作。

MAVEN_HOME類比JAVA_HOME ,把maven所在目錄配置到這個MAVEN_HOME中

四、maven配置

maven的安裝目錄的conf資料夾中有一個settings.xml檔案,而官網中又說在.m2資料夾下也有這樣一個檔案,這是一個預設資料夾,我們並不能發現。

將conf中的settings.xml檔案複製到.m2檔案下之後完成配置。

五、maven目錄結構

在這裡插入圖片描述

  • bin目錄:包含了maven執行的一些,命令指令碼
  • boot目錄:包含類載入器的一些東西
  • conf目錄:configuration包含一些配置檔案
  • lib目錄:儲存jar包

六、maven專案目錄結構

專案目錄結構,實際上指的是maven要求的專案必須的目錄層次。

在這裡我們要記住一句話:約定優於配置(Convention Over Configuration)

要使用maven進行jar包管理,以及專案的構建和管理等等,就要遵循maven的規定。在我們平時的寫java專案的時候,在Eclipse/IDEA中想怎麼建立就怎麼建立,但在使用maven時,就不能這麼隨心所欲。

maven的專案結構

在這裡插入圖片描述

注意是resources檔案,圖上畫錯了。對不起了各位 (狗頭)

七、手動建立Maven專案

用Maven執行檔案

首先建立資料夾Maven,並按照上面的maven專案結構建立各種資料夾和檔案。

在java資料夾中編寫java程式,並且在網上找pom.xml的檔案內容進行配置。

使用命令列進入到maven的工程中“Maven”,進行編譯的命令是mvn.compile。

在這裡插入圖片描述

八、用IDEA建立一個Maven專案

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

以上過程中具體的配置資訊以個人為準

九、Maven配置檔案之settings.xml

該檔案是maven的全域性配置檔案 (類似於-web專案中的web.xml),其中有許多標籤,這裡選擇一些重要的列舉。

(1)mirrors
在settings.xml檔案中有一個mirrors標籤,它表示配置映象所在的路徑的。預設的地址是國外的:https://repo.maven.apache…,maven要幫我們管理jar包,這些jar包下載的地址是從該地址下的,當然這個下載地址可以改變,就是通過mirrors標籤。

<mirror>
	<id>alimaven</id>
	<name>aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	<mirrorOf>central</mirrorOf>
</mirror>

將這段程式碼配置到mirrors標籤中即可。這是因為國外映象的下載速度比較慢,所以可以考慮國內的獎項地址,比如阿里雲

(2)localRepository
settings.xml檔案中預設的本地倉庫的位置在${user.home}/.m2/repository,當然我們可以對這個位置進行給更改:<localRepository>D://temp//repo</localRepository>(自行指定)

(3)interactiveMode
標識maven是否需要和使用者互動以獲得輸入。如果maven需要和使用者互動以獲得輸入,那麼則設定成true,不然則設定尾false。

(4)offline
標識maven是否需要在離線模式在執行

(5)pluginGroups
當外掛的組織id(group)沒有顯示提供時,供搜尋外掛組織id的列表

(6)proxies
用來配置不同的代理

(7)profiles
根據環境引數來調整構建配置的列表

(8)servers
倉庫的下載和部署是在pom.xml檔案中定義的。比如使用者名稱,密碼需要訪問遠端倉庫的時候,有時需要安全認證,這個認證就可以配置在servers標籤中。

十、Maven倉庫

maven把jar包自動下載下來之後,這個儲存jar包的目錄是由我們自己指定的,可以自己指定這個目錄儲存的位置。當然它也有一個預設的位置 。

在maven構建專案的時候,它會幫助我們把專案中所需要的一些基礎的jar包下載下來,這個下載的地址就是由settings.xml檔案裡面的mirrors標籤所指定的。

maven倉庫,實際上指的就是jar包下載下來之後儲存的目錄。

settings.xml檔案中預設的本地倉庫的位置在${user.home}/.m2/repository,當然我們可以對這個位置進行給更改:<localRepository>D://temp//repo</localRepository>(自行指定)

十一、Maven配置檔案值pom.xml

pom (project object model)專案物件模型,它為唯一表示該專案的檔案

  1. 三個必填欄位

    由groupId、artifactId、version所組成的檔案就可以唯一確定一個專案

    groupId標識專案組(通常為公司的域名)組織

    artifactId專案名稱

    version版本號

    這三個標籤是必填標籤

  2. dependencied標籤 用來配置專案中具體需要用到的jar包

  3. properties標籤 用來定義pom中的一些屬性

  4. bulid 指定如何構建當前專案

    source:指定了當前構建的souce目錄
    plugin:指定了進行構建時使用的外掛

  5. package標籤 指定當前構建專案的型別,war、jar、pom

注意:pom檔案時可以繼承的,一個pom檔案想要使用另一個pom檔案中的內容,就可以使用繼承的方式。

十二、Maven依賴

上面我們提到了pom檔案中有一個dependencies標籤,裡面可以包含很多的dependency標籤。這些標籤就是maven的依賴。

maven專案中要下載指定的jar包,實際上就是在poim.xml我呢見的dependencies標籤中進行配置,那這個dependencies怎麼寫,具體就是在 http://mvnrepository.com/ 中進行搜尋。

在這裡插入圖片描述

進入網址之後搜尋需要用到的工程的jar包,比如這裡我們需要用到Spring的jar包,搜尋之後選擇一個版本,就可以得到dependenices標籤的具體內容,將這段xml檔案程式碼複製貼上到本地倉庫的pom檔案中即可。再次對maven及逆行編譯,就可以將jar包匯入本地倉庫。(注意:直接匯入到工程中的pom檔案中也是可以的,但是在刪除pom檔案中的jar包之後本地倉庫中依舊會存在這個依賴)。

在這裡插入圖片描述

十三、Maven外掛

什麼是外掛?

從官網中我們可以看出:maven實際上是一個依賴外掛執行的框架,每個任務都是由外掛完成的。

兩種外掛型別:

  1. Bulid plugins 在構建時執行,需要在pom.xml檔案中的<bulid>標籤中進行配置
  2. reporting plugins 在網站生成過程中執行,也需要在pom.xml檔案中的<reporting>標籤中進行配置

在這裡插入圖片描述

常用的外掛列表

大家可以在官網中自行檢視 (https://maven.apache.org/plugins/index.html)

這裡列舉一些常用的外掛:

  • clean 專案構建之後用於清理專案
  • compiler 編譯java原始碼
  • jar 構建jar檔案
  • war 構建war檔案
使用外掛的方法
<!--配置bulid型別的外掛-->
<build>
	<plugins>
	<!--表示寫好了一個clean型別的外掛-->
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-clean-plugin</artifactId>
		<version>2.5</version>
	</plugin>
	<!--表示寫好了一個deploy型別的外掛-->
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-deploy-plugin</artifactId>
		<version>2.5</version>
	</plugin>
	</plugins>
</build>

十四、Maven之archetype

當我們在完成一個專案後需要新建一個專案,並且這個專案與我們完成的專案有些許相似的時候,我們會將已經完成的專案中的一些內容拷貝過去。如果不適用maven,我們需要把大量的工具類、包逐個拷貝。但如果我們使用maven後,可以將這些內容封裝在archetype中直接拷貝,這就方便了我們的操作。

對於maven本身來說,它會幫我們已經定義好一些archetype(腳手架),這些archetype時我們開發中常用的一些專案模板,當我們新建maven專案的時候,只需要選擇對應的archetype即可。

在這裡插入圖片描述

但是有時官方提供的東西不符合個人定製化的需要,所以我們可以自己定義一套archetype。

在這裡插入圖片描述

  1. 在pom.xml檔案中定義一個外掛

    <build>
    	<plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-archetype-plugin</artifactId>
    		<version>2.5</version>
    	</plugin>
    	</plugins>
    </build>
    
  2. 在pom.xml檔案所在的目錄使用mvn archetype:generate

    先在命令列中用mvn archetype:create-form-project命令建立出target資料夾。

  3. 在target目錄中會生成一個自定義的骨架。

    在target中有一個generate-sources資料夾,在這個資料夾裡就存放著archetype(腳手架)資料夾。

  4. 在本地安裝一下這個archetype

    mvn install
    

    就把剛才的archetype安裝到了本地。

十五、搭建Maven私服

在這裡插入圖片描述

在我們需要在專案中匯入jar包的時候,如果使用的是國外的映象,那麼下載速度比較慢。如果使用的是阿里雲之類的國內映象速度還算可以。但是假如網速不好的情況下也是比較慢的。又如果在沒有網的情況下就無法下載。

對於以上出現的情況,我們應該有這樣的疑問:在團隊開發的時候,是不是每個人在自己本地倉庫都需要下載一份?能不能大家公用一份?

為了解決這個問題,我們就引入了maven私服。

假如當我們某個maven專案需要一份jar包的時候(假如就是mysql-connection.jar),先看一下本地倉庫中是否有這個jar包(版本也要判斷),如果有,則不下載。如果沒有,則去下載,並且儲存到本地倉庫中,如果以後需要就不需要下載了。在專案中進行開發的時候,僅僅就是將本地倉庫的jar包匯入到工程裡面即可,再也不用像傳統原始方式那樣,每個專案厚葬都需要有單獨一個jar包,這樣就不會造成jar包的冗餘。
在這裡插入圖片描述

十六、Maven聚合專案

在之前提到的建立maven專案時,新建的都是單一的maven。

而在業務開發中我們很多情況下都要用到聚合專案——多module的maven專案。

Maven實際上可以有一個父專案,父專案下可以有很多子專案。

在這裡插入圖片描述

這裡的Spring就是父專案,而其下的springmvc和springjdbc就是子專案。

方法:在建立完Spring的maven專案之後,刪除掉main資料夾,再在Spring下建立springmvc和springjdbc的maven專案。

相關文章