看見大佬們的業務結構溜得飛起,難道你還不心動得想學Maven嗎?
一、倘若沒有 maven
當我們新建一個專案,在專案中完成
- 比如需要寫一端jdbc程式碼,去讀某張表中的資料。
- 使用Spring開發一個簡單的crud。
在這些業務建立時需要匯入很多jar包,或者在建立很多相似的專案時整體架構同樣是相似的,比如需要contextConfiguration.xml、Struts-Config.xml、Hibernate.xml、Properties.xml之類的檔案。這些都是重複的操作,如果我們沒有maven工程就需要在每次業務中完成這些操作。
Maven可以做的事情
- jar包管理
- 專案的結構和管理
我們來看看百度百科對Maven的解釋
二、Maven的介紹
jar包的管理
我們在使用Maven時應該告訴maven的一些內容:
- jar包的下載地址?
- 下載完成之後儲存在哪邊?
- 具體下載的jar包是什麼?
專案的構建和管理
- 在工作結構上進行一些限制和要求
- 至少要建立一個自己比較滿意的模板
- 對這個模板進行復制
三、下載與安裝
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)專案物件模型,它為唯一表示該專案的檔案
-
三個必填欄位
由groupId、artifactId、version所組成的檔案就可以唯一確定一個專案
groupId標識專案組(通常為公司的域名)組織
artifactId專案名稱
version版本號
這三個標籤是必填標籤
-
dependencied標籤 用來配置專案中具體需要用到的jar包
-
properties標籤 用來定義pom中的一些屬性
-
bulid 指定如何構建當前專案
source:指定了當前構建的souce目錄
plugin:指定了進行構建時使用的外掛 -
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實際上是一個依賴外掛執行的框架,每個任務都是由外掛完成的。
兩種外掛型別:
- Bulid plugins 在構建時執行,需要在pom.xml檔案中的
<bulid>
標籤中進行配置 - 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。
-
在pom.xml檔案中定義一個外掛
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-archetype-plugin</artifactId> <version>2.5</version> </plugin> </plugins> </build>
-
在pom.xml檔案所在的目錄使用
mvn archetype:generate
先在命令列中用
mvn archetype:create-form-project
命令建立出target資料夾。 -
在target目錄中會生成一個自定義的骨架。
在target中有一個generate-sources資料夾,在這個資料夾裡就存放著archetype(腳手架)資料夾。
-
在本地安裝一下這個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專案。
相關文章
- 難道你還敢忽視網路安全嗎?
- 年底了!你還在為年度總結掉頭髮嗎?那還不趕緊學起來~
- Python學習起來難不難?Python
- 你真的會學習嗎?從結構化思維說起
- 形似“飛碟”的無人機你見過嗎?它還可以滅火!無人機
- 你還不會ES的CUD嗎?
- 誰說Python找工作難?人生苦短,Python工程師你們還好嗎?Python工程師
- Python好學嗎難不難?0基礎能學會嗎?Python
- 學習Java開發難不難?好學嗎?Java
- 別擔心,你還不會失業——AppAgent 簡單試用APP
- 不務正業還是敬業奉獻?造飛機的Airbus做起了載人飛行器AI
- 萌新看過來,你還學不懂VScode外掛嗎?VSCode
- Blazor WebAssembly 3.2.0 正式起飛,blazor 適合你嗎?BlazorWeb
- 你說你學不動啦,看 Redux 作者怎麼說?Redux
- 工程師們不斷推動下的雲服務架構工程師架構
- 難道你還不知道Spring之事務的回滾和提交的原理嗎,這篇文章帶你走進原始碼級別的解讀。Spring原始碼
- 那些年我們一起追過的大佬
- (006)我們一起學Python;列表----超級結構體Python結構體
- 一個女生不主動聯絡你還有機會嗎?
- 你還不瞭解SpringSecurity嗎?快來看看SpringSecurity實戰總結~SpringGse
- 技術大佬:我去,你竟然還不會用 this 關鍵字
- 網際網路架構實踐心得:業務程式碼究竟難不難寫?架構
- 元芳 ,Js 跨域之李代桃僵,你還看嗎?JS跨域
- 大佬們有推薦的效能測試教程嗎?
- 6道常見的python面試題,你答對了嗎?Python面試題
- 3道常見的vue面試題,你都會了嗎?Vue面試題
- 沒了IDE,你的Java專案還能Run起來嗎~IDEJava
- 不學Maven會死?Maven真香!Maven
- 事件驅動架構正在起飛 – Boyney.io事件架構
- 學習python技術難不難?零基礎可以嗎?Python
- 畢業5年,我問遍了身邊的大佬,總結了他們的學習方法
- AI的新風口,能讓我們的遊戲行業起飛麼?AI遊戲行業
- 一文帶你掌握常見的 Pandas 效能優化方法,讓你的 pandas 飛起來!優化
- Python課程學習難不難?零基礎可以學習Python嗎?Python
- 網路安全技術可以自學嗎?網路安全技能難不難學
- 2020 年,我們還玩得動 100 小時的 RPG 嗎?
- 《看見》總結
- 一文帶你掌握常見的 Pandas 效能最佳化方法,讓你的 pandas 飛起來!