Maven是一個項目管理工具,它包含了這些邏輯:一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個<u>依賴管理系統</u>(Dependency Management System),和用來運行定義在生命週期階段(phase)中插件(plugin)目標(goal)。當你使用Maven的時候,你用一個明肯定義的項目對象模型來描述你的項目,而後Maven能夠應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。 java
Maven規範化構建流程:
web
用 maven 對項目進行管理,能夠幫咱們<u>構建工程,管理jar包</u>,編譯代碼,減少工程佔用的空間,還能幫咱們自動運行單元測試,打包,生成報表,甚至部署項目等等apache
Maven依賴管理:
segmentfault
a.下載:windows
Maven官網下載api
b.安裝:瀏覽器
_與普通軟件同樣,不要有特殊符號與空格_緩存
c.目錄結構:tomcat
maven 的目錄結構:jsp
bin:存放了 maven 的命令 boot:存放了一些 maven 自己的引導程序,如類加載器等 conf:存放了 maven 的一些配置文件,如 setting.xml 文件 lib:存放了 maven 自己運行所需的一些 jar 包 至此咱們的 maven 軟件就可使用了,固然了前提是你的電腦上以前已經安裝並配置好了 JDK
a.配置MAVEN_HOME:
配置MAVEN_HOME,變量值就是你的 maven安裝的路徑(bin目錄以前一級目錄)
添加到Path路徑
b.檢查Maven是否配置成功:
__打開 cmd ,輸入 mvn -v 若出現 maven 的版本號,即安裝成功__
maven 的工做須要從倉庫下載一些 jar 包,本地的項目都會經過 maven 軟件從遠程倉庫(能夠理解爲互聯網上的倉庫)下載 jar 包並存在本地倉庫,本地倉庫就是本地文件夾,當第二次須要此 jar 包時則再也不從遠程倉庫下載,由於本地倉庫已經有在了,能夠將本地倉庫理解爲緩存,有了本地倉庫就不用每次從遠程倉庫下載了。
_默認本地倉庫位置在{user.din}/.m2/repository,{user.dir}表示 windows用戶目錄_
若須要修改本地倉庫位置,首先打開 conf 目錄下的 settings.xml 文件,再找到 <u><localRepository></u> 標籤(大概在56行),而後把本身所配置的本地倉庫目錄填上去,如本人的本地倉庫:
<localRepository>D:apache-maven-3.5.2maven_repository</localRepository>
配置完後,終於能夠開始使用 maven 了!!!
進入一個 HelloWord 的 maven Web工程目錄(當前目錄有 pom. Xm文件),運行 <u>mvn tomcat:run</u>命令。
而後根據提示打開瀏覽器輸入資源地址(如:localhost:8080/hello_maven/),便可出現運行結果: Hello World。
mvn compile 是 maven 工程的編譯命令,做用是將sr/main/ava下的文件編譯爲 class 文件輸出到 target 目錄下。
mvn test 是 maven 工程的測試命令,會執行 src/test/java下的單元測試類
mvn clean 是 maven 工程的清理命令,執行 clean 會刪除 target目錄及內容
mvn package是 maven 工程的打包命令,對於 java 工程執行 package 打成 jar 包,對於 web 工程打成 war 包
mvn install 是 maven 工程的安裝命令,執行 instal 將 maven 打成 jar 包或 war 包發佈到本地倉庫
注:當後面的命令執行時,前面的操做過程也都會自動執行,
__-> Create New Project__
_普通 Java 工程能夠選擇骨架: maven-archetype-quickstart_
_IDEA 第一次建立 maven 工程會下載許多依賴包,故時間會比較長_
控制檯出現 BUILD SUCCESS 則說明成功
手動添加 src/main/java 目錄,以下圖右鍵 man 文件夾 → New → Directory,2019 版 IDEA 的 新建 Maven 工程,增長了自動隱藏 Make Directory → Sources Root 的步驟,會有提示 java 做爲自由根目錄
src/main/java 建立了一個 Servlet,但報錯
解決方案,就是要將 servlet-api-xxx.jar 包放進來,做爲 maven 工程應當添加 servlet 的座標,從而導入它的 jar
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> </dependency>
座標定義以下:
<!-- 項目名稱,定義爲組織名+項目名,相似包名 -->
<groupId>com.actadd</groupId>
<!-- 模塊名稱 -->
<artifactId>HelloWorld_Maven</artifactId>
<!-- 當前項目版本號, snapshot爲快照版本即非正式版本,release爲正式發佈版本 -->
<version>1.0-SNAPSHOT</version>
<!-- packaging:打包類型 -->
<!-- jar:執行 package會打成jar包
war:執行 package會打成war包
pom:用於 maven工程的繼承,一般父工程設置爲pom -->
<packaging>war</packaging>
座標來源:
添加依賴須要指定依賴 jar 包的座標,可是不少狀況咱們是不知道 jar 包的的座標,能夠經過以下兩個網址查詢:
http://search.mavenorg/
http://mvnrepository.com
A依賴B,須要在A的 pomum文件中添加B的座標,添加座標時須要指定依賴範圍,依賴範圍包
括:
<u>compile</u></u>:編譯範圍,指 A 在編譯時依賴 B ,此範圍爲默認依賴範圍。編譯範圍的依賴會用在編譯、測試、運行,因爲運行時須要因此編譯範圍的依賴會被打包。
<u>provided</u>: provided 依賴只有在當 JDk 或者一個容器己提供該依賴以後才使用, provided 依賴在編譯和測試時須要,在運行時不須要,好比: servlet api 被 tomcat 容器提供。
<u>runtime</u>: runtime依賴在運行和測試系統的時候須要,但在編譯的時候不須要。好比:jdbc的驅動包。因爲運行時須要因此 runtime 範圍的依賴會被打包
<u>test</u>:test範圍依賴在編譯和運行時都不須要,它們只有在測試編譯和測試運行階段可用好比:junt 因爲運行時不須要因此 test 範圍依賴不會被打包。
<u>system</u>: system 範圍依賴與 provided相似,可是你必須顯式的提供一個對於本地系統中JAR文件的路徑,須要指定 systemPath 磁盤路徑, system 依賴不推薦使用。
<scope> 依賴範圍 </scope> 默認引入的 jar 包 -- compile【默認範圍能夠不寫】(編譯、測試、運行都有效) servlet-api、jsp-api -- provided(編譯、測試有效,運行時無效防止和 tomcat 下 jar 衝突) jdbc 驅動 jar 包 -- runtime(測試、運行有效) junit --- test(測試有效) 依賴範圍由強到弱的順序是: compile > provided > runtime > test
在項目中添加依賴範圍:
package com.actadd.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @ClassName ServletDemo * @Description 在 maven 工程中建立一個 ServletDemo * @Author Actadd * @Date 21:18 2019/12/15 * @Version 1.0 */ public class ServletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //跳到 hello.jsp 資源 req.getRequestDispatcher("/hello.jsp").forward(req, resp); } }
pom.xml 中添加 tomcat 插件
接下來在運行按鈕添加 tomcat 運行配置:
添加 tomcat
右鍵運行