01-Maven
課程目標
1.Maven概述
2.Maven入門使用
3.倉庫
4.關聯Idea
5.Maven指令
6.私服
Maevn概述
引言
專案中jar包資源越來越多,jar包的管理越來越繁瑣。
- 要為每個專案手動匯入所需的jar,需要蒐集全部jar--繁瑣。
- 專案中的jar如果需要版本升級,就需要重新蒐集jar--複雜。
- 相同的jar在不同的專案中儲存了多分--儲存冗餘,散亂。
java專案需要一個統一的便捷的管理方法。
介紹
Maven這個單詞來自於易第緒語(猶太語),意為知識的積累。
Maven是一個基於專案物件模型(POM)的概念的純java開發的開源的專案管理工具。主要用來管理java專案。進行依賴管理
安裝
下載maven
地址:https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/
Maven安裝
解壓
注意:Maven解壓即課用,因此解壓目錄為安裝目錄。戒菸檔案儘量不要放在含有中文或者特殊字元的目錄下。
解壓後內部含有4個資料夾,3個檔案。其中資料夾說明如下:
- bin:含有mvn執行的指令碼;
- boot:含有plexus-classworlds類載入器框架,Maven使用該框架自己的類庫;
- conf:含有settings.xml配置檔案;
- lib:含有Maven執行時鎖需要的java類庫。
環境變數
maven依賴java環境,所以要確保java環境已配置好(maven-3.3+需要jdk7+)
maven本身有2個華寧變數需要配置:
- MAVEN_HOME=maven的安裝目錄;
- PATH=maven的安裝目錄下的bin目錄。
測試
開啟命令列視窗:
#檢視maven版本資訊
mvn -v
配置
本地倉庫
maven的conf目錄中有settings.xml,時maven的配置檔案,做如下配置:
<localRepository>D:\developer_tools\Java\maven_repository_for3.5.4</localRepository>
我d
說明:配置檔案中的地址為存放maven管理的jar包的位置,是自己新建的一個資料夾。
JDK配置
在<profiles>標籤中增加一個<profile>標籤,限定maven專案預設的jdk版本。內容如下
<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
<!--讓增加的profile生效--> <activeProfiles> <activeProfile>jdk-1.8</activeProfile> </activeProfiles
倉庫
儲存依賴的地方。
倉庫不僅存放依賴,而且每個依賴都有唯一標識(座標),供java專案索取。
倉庫分類
本地倉庫:其實就是上面建的資料夾,會把下載的jar包儲存到裡面。
遠端倉庫-中央倉庫:安裝了maven,就會自動對映這個倉庫,不需要任何配置,但由於伺服器在國外,訪問慢。
遠端倉庫-公共倉庫:由於遠端倉庫訪問慢,因此有些企業等建立了公共倉庫供大家使用,如阿里雲倉庫,後面我們會配置。
遠端倉庫-私服:是公司內部搭建的遠端倉庫,訪問是遠端倉庫中最快的,也可以放一些公司自己搭建的jar包。後面我們會試著安裝私服。
當需要依賴時,會從倉庫中去查詢,優先順序為:
本地倉庫->私服(如果配置)->公共倉庫(如果配置)->中央倉庫
本地倉庫
即在setting.xml中配置的目錄,是上面我們新建的,並配置在配置檔案中。當然現在是什麼也沒有的。
使用過的依賴都會自動儲存在本地倉庫中,後續可以複用。因此本地倉庫會越來越壯大。
遠端倉庫
中央倉庫
Maven中央倉庫是由Maven社群提供的倉庫,不用任何配置,maven中內建了中央倉庫地址。
其中包含了絕大多數流行的開源Java構件。
公共倉庫(重點)
除中央倉庫之外,還有其它遠端倉庫。
比如aliyun倉庫(http://maven.aliyun.com/nexus/content/groups/public)
中央倉庫在國外,下載依賴速度過慢,所以都會配置一個國內的公共倉庫替代中央倉庫。
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
私服(瞭解)
公司範圍內共享的倉庫,不對外開放。
可以通過nexus來建立、管理一個私服。
後續章節會講解,不過我可能會直接略過。
關聯Idea
在idea中關聯mavem
在idea中關聯本地安裝的maven,後續就可以通過idea使用maven,管理專案啦。
建立Maven專案
上面已經在idea中關聯了maven,現在就可以在idea中基於maven構建專案了。
新建專案
新建專案,要選擇maven選項
指定專案名
專案位置
點選自動導包。
專案結構
maven專案的目錄結構是統一的,我們要熟悉。
- src/main/java存放原始碼,建包,放專案中程式碼(service,dao,User,...)
- src/main/resources書寫配置檔案,專案中的配置檔案(jdbc.properties)
- src/test/java書寫測試程式碼,專案中測試案例程式碼
- src/test/resources書寫測試案例相關檔案,這個idea建立好後沒有,需要我們自動建立,當然不用的話就不建立。
- 專案根/pom.xml(project object model)maven專案核心檔案,其中定義專案構建方式,宣告依賴等
注意:專案中的建包,建類,執行,都和普通專案無差異。
專案型別
根據專案型別,在pom.xml中做出對應配置,新增配置:<packaging>jar</packaging>
匯入依賴jar
建好專案後,需要匯入需要的ajr,要通過【座標】
- 每個構件都有自己的座標(標識)=group+artifactId+version=專案標識+專案名+版本號
- 在maven專案中需要配置座標,maven便會自動載入對應依賴。刪除座標會移除依賴。
查詢依賴
依賴查詢服務:https://mvnrepository.com/,獲得依賴的座標,在maven專案中匯入。也可以直接百度maven,這個連結。
匯入依賴
然後搜尋,複製,並放入pom檔案即可。
建立web專案
打包方式
pom.xml中設定<packaging>war</packaging>
對於jar是預設方式,不寫就是jar。
web依賴
匯入JSP和Servlet和JSTL依賴,使專案具有web編譯環境。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qf</groupId> <artifactId>test_shine</artifactId> <version>1.0-SNAPSHOT</version> <!--設定專案類別 java專案是jar javaWeb專案是war--> <packaging>war</packaging> <!--定義專案中需要的所有依賴--> <dependencies> <!--jstl支援--> <!-- https://mvnrepository.com/artifact/javax.servlet/jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--servlet編譯環境--> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!--jsp編譯環境--> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies> </project>
webapp目錄
按照maven規範,新建web專案特有目錄
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0" > <!--這是一個空白的web.xml檔案模板--> </web-app>
定義Servlet和Jsp
下面就是正常定義我們鎖需要的Servlet和JS
servlet程式碼:
package com.qf.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author YCKJ-GaoJT * @create 2020-11-02 17:06 **/ @WebServlet("/shine") public class ShineServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("shine servlet"); //轉發跳轉 index.jsp req.getRequestDispatcher("/index.jsp").forward(req,resp); } }
index.jsp程式碼
<%-- Created by IntelliJ IDEA. User: YCKJ3911 Date: 2020/11/2 Time: 17:07 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <span style="color: red;">Hello world</span> </body> </html>
部署web專案
新增Tomcat
這裡略(P5的6分鐘之後),因為我Tomcat沒有安裝,這裡後續補充,先學習P6及之後
部署web專案
啟動Tomcat
依賴生命週期
專案中匯入的依賴可以做生命週期的管理,生命週期是指這個依賴在哪些過程中是有效的。
這裡還有一些講解,是和上面省略的有一點關係,不長,後續補充下,P6
maven有生命週期如下:
標識 | 週期 |
compile | 預設值(預設值),適用於所有階段(測試執行,編譯,執行,打包) |
provided | 類似complile,期望JDK、容器或使用者提供這個依賴,如servlet-api.jar;適用於(測試執行,編譯)階段 |
runtime | 只在執行時使用,如mysql的驅動jar,適用於(執行、測試執行)階段 |
test | 只在測試時使用,適用於(編譯,測試執行)階段,如junit.jar |
system | Maven不會在倉庫中查詢對應依賴,在本地磁碟目錄中查詢;適用於(編譯,測試執行,執行)階段 |
Maven指令
命令列
由於有一點涉及上面,因此筆記暫時不做。後續補充。
maven面板
暫略
私服
贊略