是什麼
你可以叫它“妹文”也可以叫“麥文”,總之別叫“媽文”就行。
- maven是一款服務於java平臺的自動化構建工具,即能夠自動把動態的Web工程經過編譯得到的編譯結果部署到服務器。
爲什麼要用
1、簡化工作,節約內存
在傳統的java web項目中,jar包都是放在各自的lib目錄中,同樣的jar包重複的出現在不同的項目工程中,你需要做不停的複製粘貼的重複工作,還佔內存。一兩個項目還好,若是幾十上百個項目呢?藉助於maven,可以將jar包保存在“倉庫”中,不管在哪個項目只要使用引用即可就行。
2、方便管理
藉助於maven我們可以使用統一的規範方式下載jar包,不同的項目在使用jar包的時候,有可能會導致各個項目的jar包版本不一致,導致未執行錯誤。藉助於maven,所有的jar包都放在“倉庫”中,所有的項目都使用倉庫的一份jar包。
還可以藉助maven把一個龐大的項目拆分成多個工程。
3、自動依賴
在以往,一個jar包依賴其他的jar包需要自己手動的加入到項目中,而使用maven它會自動的將依賴的jar包導入進來。
安裝maven
1、下載
LINUX&MAC選擇第一,WINDOWS選擇第二個。
2、解壓maven放在一個非中文無空格的路徑下
3、 配置maven的相關環境變量(要保證配置好JAVA_HOME)
- 在系統變量增加M2_HOME,路徑是maven解壓後的根目錄
- 在環境變量裏的path中增加maven/bin的目錄
- 打開cmd,輸入mvn -v,出現下面信息則成功
注:若輸入mvn -v顯示“mvc 不是內部命令”,則在系統變量的path輸入%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem載重啓cmd即可。
Maven的核心概念
- 約定的目錄結構
- POM
- 座標
- 依賴
- 倉庫
- 生命週期/插件/目標
- 繼承
- 聚合
Maven目錄
在開發中如果需要讓第三方工具或框架知道我們自己創建的資源在哪,那麼基本上就是兩種方式:
- 以配置文件的方式明確告訴框架 如 < param-value>classpath:spring-context.xml < /param-value>
- 遵循框架內部已經存在的約定如log4j的配置文件名規定必須爲 log4j.properties 或 log4j.xml ;Maven 使用約定的目錄結構
常用命令
注意:執行與構建過程相關的Maven命令,必須進入pom.xml 所在的目錄。
- mvn clean : 清理
- mvn compile : 編譯主程序
- mvn test-compile : 編譯測試程序
- mvn test : 執行測試
- mvn package : 打包
- mvn install : 安裝
- mvn site :生成站點
關於聯網
- Maven 的核心程序中僅僅定義了抽象的生命週期,但是具體的工作必須有特定的插件來完成。而插件本身不包含在Maven核心程序中。
- 當我們執行的Maven命令需要用到某些插件時,Maven核心程序會首先到本地倉庫中查找。
- 本地倉庫的默認位置:[系統登陸用戶的家目錄] \ .m2\repository
- Maven核心程序如果在本地倉庫中找不到需要的插件,那麼它會自動連接外網,到中央倉庫下載。
- 如果此時無法連接外網,則構建失敗。
- 修改默認本地倉庫的位置可以讓Maven核心程序到我們事先準備好的目錄下查找插件
- 找到Maven解壓目錄\conf\settings.xml
- 在setting.xml 文件中找到 localRepository 標籤
- 將 < localRepository>/path/to/local/repo< /localRepository>從註釋中取出
- 將標籤體內容修改爲自定義的Maven倉庫目錄
POM
含義:Project Object Model 項目對象模型
pom.xml 對於 Maven工程是核心配置文件,與構建過程相關的一切設置都在這個文件中進行配置。 重要程度相當於web.xml 對於動態web工程。
座標
使用下面三個向量在倉庫中唯一定位一個Maven工程,座標不可重複。
1、groupid:公司或組織域名倒序+項目名
< groupid>com.atguigu.maven< /groupid>
2、artifactid:模塊名
< artifactid>Hello< /artifactid>
3、version:版本
< version>1.0.0< /version>
倉庫
倉庫的分類
①本地倉庫:當前電腦上部署的倉庫目錄,爲當前電腦上所有Maven工程服務
②遠程倉庫
- 私服:搭建在局域網環境中,爲局域網範圍內的所有Maven工程服務
- 中央倉庫:假設在Internet上,爲全世界所有Maven工程服務
- 中央倉庫鏡像:爲了分擔中央倉庫流量,提升用戶訪問速度
倉庫中保存的內容:Maven工程
- Maven自身所需要的插件
- 第三方框架或工具的jar包
- 我們自己開發的Maven工程
不管是什麼樣的 jar 包,在倉庫中都是按照座標生成目錄結構,所以可以通過統一的方式查詢或依賴。
依賴
- 當 A jar 包用到了 B jar 包中的某些類時,A 就對 B 產生了依賴。
- Maven解析依賴信息時會到倉庫中查找被依賴的jar包。
- 對於我們自己開發的Maven工程,要使用mvn install 命令安裝後就可以進入倉庫。
在Eclipse中使用Maven
Maven插件Eclipse已經內置。
Maven插件的設置: Window->Preferences->Maven
- installations : 指定Maven核心程序的位置。默認是插件自帶的Maven程序,改爲我們自己解壓的那個。
- user settings : 指定Maven核心程序中 conf/settings.xml 文件的位置,進而獲取本地倉庫的位置。
基本操作
①創建Maven版的Java工程
創建時勾選上 Create a simple project(skip archetype selection)
創建的Maven工程默認使用的是JDK1.5,打開Maven核心程序settings.xml文件,找到profiles標籤,加入如下配置,即可更改
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
②創建Maven版的Web工程
1、New Maven project時,Packaging 選擇 war
2、調整web目錄結構,在項目上點右鍵 -> properties->Project Facets -> 把Dynamic Web Module 勾選去掉,並Apply -> 將Dynamic Web Module 重新勾選 -> 點擊Further configuration available -> 修改 Content directory爲src/main/webapp -> Apply 即在Maven工程上生成動態Web目錄結構
3、新建jsp文件發現報錯:The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
因爲缺少Tomcat 運行時環境
以Maven方式添加:
在pom.xml文件中添加
注意:scope一定要是provided,不然jar包衝突,運行時會報空指針異常
③執行Maven命令
選中pom.xml 右鍵 Run As->Maven build…->Goals->輸入 compile ->點擊 run
idea集成maven插件
https://www.bilibili.com/video/av50351111/?p=444
參考
- https://mp.weixin.qq.com/s?src=11×tamp=1571812350&ver=1929&signature=5hzE5Gs463SuOOPr0sl12yIcgpciUdj3cTHlDEj1lZ63q4Fr0oOj-IGeiquWpM4pDJbzoFlTkgNXTy-PCrUqxfYRCe5asQ-ymO-RxZmn-PwpvsGwBexZWAXerKBZR69G&new=1
- https://www.bilibili.com/video/av36557763/?p=3(上面這篇公衆號文章就是根據這個視頻來的)
- https://blog.csdn.net/zxm1306192988/article/details/76209062(2的筆記)
- https://www.runoob.com/maven/maven-setup.html