1. 程式人生 > 實用技巧 >01-Maven

01-Maven

課程目標

1.Maven概述

2.Maven入門使用

3.倉庫

4.關聯Idea

5.Maven指令

6.私服

Maevn概述

引言

專案中jar包資源越來越多,jar包的管理越來越繁瑣。

  1. 要為每個專案手動匯入所需的jar,需要蒐集全部jar--繁瑣。
  2. 專案中的jar如果需要版本升級,就需要重新蒐集jar--複雜。
  3. 相同的jar在不同的專案中儲存了多分--儲存冗餘,散亂。

java專案需要一個統一的便捷的管理方法。

介紹

Maven這個單詞來自於易第緒語(猶太語),意為知識的積累。

Maven是一個基於專案物件模型(POM)的概念的純java開發的開源的專案管理工具。主要用來管理java專案。進行依賴管理

(jar包依賴管理)和專案構建(專案編譯、打包、測試、部署)。此外還能分塊開發,提高開發效率。

安裝

下載maven

地址:https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/

Maven安裝

解壓

注意:Maven解壓即課用,因此解壓目錄為安裝目錄。戒菸檔案儘量不要放在含有中文或者特殊字元的目錄下。

解壓後內部含有4個資料夾,3個檔案。其中資料夾說明如下:

  1. bin:含有mvn執行的指令碼;
  2. boot:含有plexus-classworlds類載入器框架,Maven使用該框架自己的類庫;
  3. conf:含有settings.xml配置檔案;
  4. lib:含有Maven執行時鎖需要的java類庫。

環境變數

maven依賴java環境,所以要確保java環境已配置好(maven-3.3+需要jdk7+)

maven本身有2個華寧變數需要配置:

  1. MAVEN_HOME=maven的安裝目錄;
  2. 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專案的目錄結構是統一的,我們要熟悉。

  1. src/main/java存放原始碼,建包,放專案中程式碼(service,dao,User,...)
  2. src/main/resources書寫配置檔案,專案中的配置檔案(jdbc.properties)
  3. src/test/java書寫測試程式碼,專案中測試案例程式碼
  4. src/test/resources書寫測試案例相關檔案,這個idea建立好後沒有,需要我們自動建立,當然不用的話就不建立。
  5. 專案根/pom.xml(project object model)maven專案核心檔案,其中定義專案構建方式,宣告依賴等

注意:專案中的建包,建類,執行,都和普通專案無差異。

專案型別

根據專案型別,在pom.xml中做出對應配置,新增配置:<packaging>jar</packaging>

匯入依賴jar

建好專案後,需要匯入需要的ajr,要通過【座標】

  1. 每個構件都有自己的座標(標識)=group+artifactId+version=專案標識+專案名+版本號
  2. 在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面板

暫略

私服

贊略