Maven(一)Maven是什麼
maven的介紹,初步認識,獲取jar包的三個關鍵屬性 --> 介紹倉庫(獲取的jar包從何而來)-->用命令列管理maven專案(建立maven專案) --> 用myeclipse建立maven專案 -->詳細介紹pom.xml中的依賴關係(座標獲取、定位jar包的各種屬性講解。
--WH
一、簡單的小問題?
解釋之前,提1個小問題。
1.1、假如你正在Eclipse下開發兩個Java專案,姑且把它們稱為A、B,其中A專案中的一些功能依賴於B專案中的某些類,那麼如何維繫這種依賴關係的呢?
很簡單,這不就是跟我們之前寫程式時一樣嗎,需要用哪個專案中的哪些類,也就是用別人寫好了的功能程式碼,匯入jar包即可。所以這裡也如此,可以將B專案打成jar包,然後在A專案的Library下匯入B的jar檔案,這樣,A專案就可以呼叫B專案中的某些類了。
這樣做幾種缺陷
如果在開發過程中,發現B中的bug,則必須將B專案修改好,並重新將B打包並對A專案進行重編譯操作
在完成A專案的開發後,為了保證A的正常執行,就需要依賴B(就像在使用某個jar包時必須依賴另外一個jar一樣),兩種解決方案,第一種,選擇將B打包入A中,第二種,將B也釋出出去,等別人需要用A時,告訴開發者,想要用A就必須在匯入Bjar包。兩個都很麻煩,前者可能造成資源的浪費(比如,開發者可能正在開發依賴B的其它專案,B已經儲存到本地了,在匯入A的jar包的話,就有了兩個B的jar),後者是我們常遇到的,找各種jar包,非常麻煩(有了maven就不一樣了)
1.2、我們開發一個專案,或者做一個小demo,比如用SSH框架,那麼我們就必須將SSH框架所用的幾十個依賴的jar包依次找出來並手動匯入,超級繁瑣。
上面兩個問題的描述,其實都屬於專案與專案之間依賴的問題[A專案使用SSH的所有jar,就說A專案依賴SSH],人為手動的去解決,很繁瑣,也不方便,所以使用maven來幫我們管理
二、maven到底是什麼?
Maven是基於專案物件模型(POM project object model),可以通過一小段描述資訊(配置)來管理專案的構建,報告和文件的軟體專案管理工具[百度百科]
這種又是大白話,如果沒明白maven是什麼,那麼上面這句話跟沒說一樣,我自己覺得,Maven的核心功能便是合理敘述專案間的依賴關係
所以,根據上一段的描述,我們最終的目的就是學會如何在pom.xml中配置獲取到我們想要的jar包,在此之前我們就必須瞭解如何建立maven專案,maven專案的結構是怎樣,與普通java,web專案的區別在哪裡,還有如何配置pom.xml獲取到對應的jar包等等,這裡提前瞭解一下我們如何通過pom.xml檔案獲取到想要的jar的,具體後面會詳細講解該配置檔案。
pom.xml獲取junit的jar包的編寫。
為什麼通過groupId、artifactId、version三個屬性就能定位一個jar包?
加入上面的pom.xml檔案屬於A專案,那麼A專案肯定是一個maven專案,通過上面這三個屬效能夠找到junit對應版本的jar包,那麼junit專案肯定也是一個maven專案,junit的maven專案中的pom.xml檔案就會有三個識別符號,比如像下圖這樣,然後別的maven專案就能通過這三個屬性來找到junit專案的jar包了。所以,在每個建立的maven專案時都會要求寫上這三個屬性值的。
三、maven的安裝
這一步maven環境的配置,我覺得有必要安裝一下,目的為了使用命令列建立maven專案,和使用命令列操作maven專案。這裡不細講,給出連結,跟安裝jdk環境類似,maven的安裝教程和配置
還有注意,我以下用的是maven3.0.4版本(比較低的),你們可以下載最新的版本,最好是使用jdk1.7.
四、倉庫的概念
通過pom.xml中的配置,就能夠獲取到想要的jar包(還沒講解如何配置先需要了解一下倉庫的概念),但是這些jar是在哪裡呢?就是我們從哪裡獲取到的這些jar包?答案就是倉庫。
倉庫分為:本地倉庫、第三方倉庫(私服)、中央倉庫
4.1、本地倉庫
Maven會將工程中依賴的構件(Jar包)從遠端下載到本機一個目錄下管理,每個電腦預設的倉庫是在 $user.home/.m2/repository下
例如我的就在:C:\Users\Administrator\.m2\repository
一般我們會修改本地倉庫位置,自己建立一個資料夾,在從網上下載一個擁有相對完整的所有jar包的結合,都丟到本地倉庫中,然後每次寫專案,直接從本地倉庫裡拿就行了
這裡面有很多各種各樣我們需要的jar包。
修改本地庫位置:在$MAVEN_HOME/conf/setting.xml檔案中修改,
D:\java\maven\repository:就是我們自己建立的本地倉庫,將網上下載的所有jar包,都丟到該目錄下,我們就可以直接通過maven的pom.xml檔案直接拿。
4.2、第三方倉庫
第三方倉庫,又稱為內部中心倉庫,也稱為私服
私服:一般是由公司自己設立的,只為本公司內部共享使用。它既可以作為公司內部構件協作和存檔,也可作為公用類庫映象快取,減少在外部訪問和下載的頻率。(使用私服為了減少對中央倉庫的訪問
私服可以使用的是區域網,中央倉庫必須使用外網
也就是一般公司都會建立這種第三方倉庫,保證專案開發時,專案所需用的jar都從該倉庫中拿,每個人的版本就都一樣。
注意:連線私服,需要單獨配置。如果沒有配置私服,預設不使用
4.3、中央倉庫
Maven內建了遠端公用倉庫:http://repo1.maven.org/maven2
這個公共倉庫是由Maven自己維護,裡面有大量的常用類庫,幷包含了世界上大部分流行的開源專案構件。目前是以java為主
工程依賴的jar包如果本地倉庫沒有,預設從中央倉庫下載
總結:獲取jar包的過程
五、使用命令列管理maven專案
5.1、建立maven java專案
自己建立一個資料夾,在該資料夾下按shift+右擊,點開使用命令列模式,這樣建立的maven[java]專案就在該資料夾下了。
命令:mvn archetype:create -DgroupId=com.wuhao.maven.quickstart -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart
mvn:核心命令
archetype:create:建立專案,現在maven高一點的版本都棄用了create命令而使用generate命令了。
-DgroupId=com.wuhao.maven.quickstart :建立該maven專案時的groupId是什麼,該作用在上面已經解釋了。一般使用包名的寫法。因為包名是用公司的域名的反寫,獨一無二
-DartifactId=simple:建立該maven專案時的artifactId是什麼,就是專案名稱
-DarchetypeArtifactId=maven-archetype-quickstart:表示建立的是[maven]java專案
執行的前提:需要聯網,必須上網下載一個小檔案
執行成功後
在D:\java\maven\demo下就會生成一個simple的檔案,該檔案就是我們的maven java專案
5.2、maven java專案結構
simple
---pom.xml 核心配置,專案根下
---src
---main
---java java原始碼目錄
---resources java配置檔案目錄
---test
---java 測試原始碼目錄
---resources 測試配置目錄
圖中有一個target目錄,是因為將該java專案進行了編譯,src/main/java下的原始碼就會編譯成.class檔案放入target目錄中,target就是輸出目錄。
5.3、建立 maven web 專案
命令:mvn archetype:create -DgroupId=com.wuhao.maven.quickstart -DartifactId=myWebApp -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot
其他都差不多,建立maven web專案的話 -DarchetypeArtifactId=maven-archetype-webapp 比建立java專案多了一個 -Dversion=0.01-snapshot, 在建立java專案的時候也可以加上這個,如果不寫,會預設幫我們加上1.0-snapshot。
在D:\java\maven\demo下就會生成一個myWebApp的檔案
5.4、maven web專案結構
pom.xml 核心配置
src/main/java java原始碼
src/main/resources java配置
src/main/webapp myeclipse web專案中 WebRoot目錄
|-- WEB-INF
|-- web.xml
src/test 測試
target 輸出目錄
5.5、命令操作maven java或web專案
編譯:mvn compile --src/main/java目錄java原始碼編譯生成class (target目錄下)
測試:mvn test --src/test/java 目錄編譯
清理:mvn clean --刪除target目錄,也就是將class檔案等刪除
打包:mvn package --生成壓縮檔案:java專案#jar包;web專案#war包,也是放在target目錄下
安裝:mvn install --將壓縮檔案(jar或者war)上傳到本地倉庫
部署|釋出:mvn deploy --將壓縮檔案上傳私服
5.6、例子:使用命令操作maven java專案
注意:使用命令時,必須在maven java專案的根目錄下,及可以看到pom.xml
描述:將maven java專案打包上傳到本地倉庫供別人呼叫
使用 mvn install
在本地倉庫中檢視是否有該專案
D:\java\maven\repository\com\wuhao\maven\quickstart\simple\1.0-SNAPSHOT
通過在本地倉庫中的目錄可以發現為什麼通過groupId、artifactId、version可以定位到倉庫中得jar包,也可以知道為什麼groupId要使用公司域名的反寫(因為這樣唯一,不會與別的專案重名導致查詢到的內容不精確)
5.7、maven專案的完整生命週期,當執行生命週期後面命令時,前面步驟的命令自動執行
紅色標記字型的意思就是當我們直接使用mvn install命令對專案進行上傳至本地倉庫時,那麼前面所有的步驟將會自動執行,比如原始碼的編譯,打包等等。
5.8、其他命令
maven java或web專案轉換Eclipse工程
mvn eclipse:eclipse
mvn eclipse:clean 清楚eclipse設定資訊,又從eclipse工程轉換為maven原生專案了
...轉換IDEA工程
mvn idea:idea
mvn idea:clean 同上
六、使用Myeclipse建立maven自定義專案
使用myeclpse建立專案前,需要在myeclipse中配置maven的一些資訊
比如:配置本地倉庫、安裝自定義maven(myeclipse中高版本自帶了maven)等,這裡省略。
6.1、java專案
1、選擇maven project,如果右鍵新建沒有,通過other獲得
2、建立一個簡單專案(跳過骨架選擇)
3、設定專案引數,建立java專案
4、建立java專案結果
6.2、建立maven web專案
1、同上
2、同上
3、設定專案引數,其他一樣,選擇打包方式不一樣。
4、建立web專案結果
5、可能報錯1:pom.xml報錯
結果如下
然後需要更新一下專案,就不報錯了。
6、報錯2,編寫jsp時報錯
錯誤資訊為缺少serlvet-jar和jsp-jar包
解決:使用pom.xml定位匯入相應的jar包
找到jsp-jar包,scope的作用是表示該jar包的作用範圍,provided表示在編譯和測試期有效,在執行期則無效。具體後面講解pom.xml時會講解到。
找到servle-jar包
pom.xml中檢查,修改
修改完後,發現兩個jar包都載入進來了,專案完好,不在報錯了。
6.3、建立maven專案
都一樣,在專案引數那裡修改即可
結果
maven專案一般沒用,在開發中將一個專案拆分成多個項,就需要使用maven專案(pom專案)將其他子專案進行整合,下一章節講解,很重要。很重要。
6.4、myeclipse maven操作
6--9 都是快捷方式
9 測試,相當於命令列 mvn test
8 安裝,相當於命令列 mvn install 作用:將其上傳到本地倉庫,具體見上面講解
7 關聯原始碼,這個不需要解釋吧,平常我們使用別的jar包也關聯過原始碼
6 清理,mvn clean
5 maven bulid 執行maven命令,等效 mvn
4 maven build 5快速的操作
如果沒有操作過,與5相同
如果操作過一次,將直接執行上一次5的命令
如果操作多次,將提供選擇框
6.5、例子,將maven web專案釋出到tomcat執行
命令:tomcat:run
通過網址即可訪問,同時會將該專案上傳到本地倉庫。
七、pom.xml的依賴關係講解(重點)
之前一直在使用pom.xml中找jar包最關鍵的三個屬性,groupId、artifactId、version,應該有些印象了,也知道為什麼通過這三個能找到對應的jar包,但是沒有細講其中的一些小的知識點,比如上面新增servlet-jar和jsp-jar的依賴時,出現的一些屬性就不太懂,所以,這一章節,就將依賴關係全面分析。
7.1、如何獲取座標(也就是三個關鍵屬性值)
方式1:使用網站搜尋[從中央倉庫拿]
步驟一:百度搜索關鍵字“maven repository”
步驟二:輸入關鍵字查詢獲得需要內容,確定需要版本
步驟三、獲得座標
方式2、使用本地倉庫,通過myeclipse獲得座標
上面已經介紹過了如何從本地倉庫獲取對應jar,這裡在簡單闡述一下
步驟一:新增依賴,pom.xml檔案中,右鍵
步驟二:獲得座標
7.2、依賴(座標)的常見配置
為了避免不知道說的哪些配置屬性,看下面圖就明白了,就是dependency下的屬性配置,全部有9個,講其中的7個。
groupId、artifactId、version是依賴的基本座標,缺一不可,這三個可以不用將,都知道,重要的是除了這三個之外的配置屬性需要我們理解
type:依賴的型別,比如是jar包還是war包等
預設為jar,表示依賴的jar包
注意:<type>pom.lastUpdated</type> 這個我們在上面新增servlet-jar的時候就遇到過,看到lastUpdated的意思是表示使用更新描述資訊,佔位符作用,通俗點講,選擇該型別,jar包不會被載入進來,只是將該jar包的一些描述資訊載入進來,使別的jar包在引用他時,能夠看到一些相關的提示資訊,僅此而已,所以說他是個佔位符,只要記住他的jar包不會被載入進來。
optional:標記依賴是否可選。預設值false
比如struts2中內建了log4j這個記錄日誌的功能,就是將log4j內嵌入struts2的jar包中,而struts2有沒有log4j這個東西都沒關係,有它,提示的資訊更多,沒它,也能夠執行,只是提示的資訊就相對而言少一些,所以這個時候,就可以對它進行可選操作,想要它就要,不想要,就設定為false。
exclusions:排除傳遞依賴,解決jar衝突問題
相關推薦
maven(一) maven到底是個啥玩意~
開發者 inf a13 mvn clean 相對 依賴範圍 即使 代碼 好處 我記得在搞懂maven之前看了幾次重復的maven的教學視頻。不知道是自己悟性太低還是怎麽滴,就是搞不清楚,現在弄清楚了,基本上入門了。寫該篇博文,就是為了幫助那些和我一樣對於mave
轉帖 maven(一) maven到底是個啥玩意~
大白 中心 最好 新的 區別 OS rate ner 命令行模式 轉載自:https://www.cnblogs.com/whgk/p/7112560.html 我記得在搞懂maven之前看了幾次重復的maven的教學視頻。不知道是自己悟性太低還是怎麽滴,就是搞不清楚,
maven(一) maven入門-maven簡單教程
我記得在搞懂maven之前看了幾次重複的maven的教學視訊。不知道是自己悟性太低還是怎麼滴,就是搞不清楚,現在弄清楚了,基本上入門了。寫該篇博文,就是為了幫助那些和我一樣對於maven迷迷糊糊的人。有福了,看完基本上你就會發現原來這麼簡單。 參考博文:通俗理解maven
Maven介紹_轉載 maven(一) maven到底是個啥玩意~
maven(一) maven到底是個啥玩意~ 我記得在搞懂maven之前看了幾次重複的maven的教學視訊。不知道是自己悟性太低還是怎麼滴,就是搞不清楚,現在弄清楚了,基本上入門了。寫該篇博文,就是為了幫助那些和我一樣對於maven迷迷糊糊的人。有福了,看完基
Maven(一)Maven是什麼
maven的介紹,初步認識,獲取jar包的三個關鍵屬性 --> 介紹倉庫(獲取的jar包從何而來)-->用命令列管理maven專案(建立maven專案) --> 用myeclipse建立maven專案 -->詳細介紹pom.xml中的依賴關係(座標獲取
Maven系列學習(一)Maven基本知識
gen 文件 cli 系列 路徑 標準化 enc 模型 conf Maven 簡介 1.Maven主要是基於Java平臺的項目構建,依賴管理和項目信息 2.Maven是優秀的構建工具,跨平臺,消除構建的重復,抽象了一個完整的構建生命周期模型,標準化構建過程 3.管理分布的項
系統優化(一)Maven打包同一個jar有不同的:版本號+時間戳(解決思路)
trac net 排除 構建 多個 可能 sof alt height 解決:maven倉庫的ear裏面有非常多個同樣的jar(僅僅是包括不同的:版本號+時間戳) 問題描寫敘述: 發現ear裏面有非常多個同樣的jar,僅僅是包括不同的:版本號+時間
Maven學習(一)-----Maven安裝配置總結
8.0 運行 com 環境變量 添加 tar java_home 3.0 ria 想要安裝 Apache Maven 在Windows 系統上, 需要下載 Maven 的 zip 文件,並將其解壓到你想安裝的目錄,並配置 Windows 環境變量。 所需工具 : JDK
maven一鍵部署tomcat war包(轉載)
install pom.xml password 一次 輸出 group 通過 cli con 1、環境如下 eclipse、apache-maven-3.0.5、apache-tomcat-7.0.39 2、配置如下 apache-tomcat-7.0.39配
微信開發準備(一)——Maven倉庫管理新建WEB項目
情況 IT 分享圖片 dex 記錄 項目依賴 完全 大致 .com 在我們的項目開發中經常會遇到項目周期很長,項目依賴jar包特別多的情況,所以我們經常會在項目中引入Maven插件,建立起Maven項目,今天我就記錄一個簡單的Maven項目建立的簡單流程! ①Maven基礎
maven(一)下載,安裝和配置
iar set post 技術 enter 結構 maven插件 公眾號 bsp 01.maven的簡介 maven主要服務於基於java平臺的項目構建,依賴管理和項目信息管理。 構建:它是一個非常強大的自動化構建工具,從清理,編譯,測試到生成報告,再到打包和部署
maven(一) 一 修改倉庫存放路徑
maven安裝 默認 系統 重新 setting 文件中 XML 文件 bin 一、修改倉庫存放路徑 maven默認的倉庫是在C盤下的,這樣當重新裝系統的時候,倉庫就要重新建了。因此可以修改默認存放的位置。 修改倉庫的地址在maven安裝
Maven一鍵修改專案jdk版本
將以下程式碼複製到maven的pom.xml裡,再更新以下專案就可以看到效果 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins<
關於maven一updateProject專案的jdk就變成1.5或者時1.6的
一、在pom.xml中的<build><plugins><plugin>下加入<configconfiguration><source>1.7</source><target>1.7</target>
maven 一次打包多個maven專案
maven 一次打包多個maven專案。 使用場景 一個專案由多個子專案組成,每個子專案也是一個maven專案。每次打包需要打包每個子專案,很麻煩,其實可以通過配置一個頂級的pom.xml檔案來解決這個問題,只需要打包頂層的maven專案,即可。如果一個專案有多個子專案的pom.
#maven一波流(1)——為何用maven
背景 人們覺得走路累,發明了自行車,人們覺得自行車還是累,發明了汽車,覺得汽車費油汙染環境,發明電動車。 一樣的道理,在Java程式開發中,程式設計師覺得jar包不好管理,就搞了個maven。 maven誕生 在不用maven時,每次開發一個專案,都要找各種各樣的
maven一波流(2)——maven安裝與配置
總體步驟 maven本身就是Java寫的,所以JDK得安裝。 JDK和maven的環境變數也得配置,環境變數這個一定要理解,實際上相當於告訴作業系統,咱們已經有JDK和maven環境了,這樣再其他地方需要呼叫JDK或者maven的時候無需指定,作業系統就會知
maven一波流(3)——使用eclipse構建第一個maven工程
概述 傳統工程中,jar包需要自己拷貝到專案裡面來,然後專案編譯的時候可以訪問到這些jar包,完成專案的構建工作。 但是maven專案則不同,實際上專案目錄下是沒有jar包的。maven工程對專案的結構是有特殊要求的,比如至少得有一個配置檔案,告訴工程需要引
maven(一)-介紹
一、Maven 是什麼? Maven 是一個專案管理和整合工具。Maven 為開發者提供了一套完整的構建生命週期框架。開發團隊幾乎不用花多少時間就能夠自動完成工程的基礎構建配置,因為 Maven 使用了一個標準的目錄結構和一個預設的構建生命週期。 在有多個開發團隊環境的情
如何在Eclipse上部署Maven(一)
一、準備好我們上次下載的Mvaen檔案 二、建立一個本地倉庫 (建立一個資料夾) 三、現在就要讓你的中央倉庫 和 本地倉庫產生聯絡 然後右擊選擇寫字本開啟 找到 localRepository 那個路徑就是之前建立的本地倉庫的路