maven自動化構建工具

Mrwhite86 發表於 2021-05-03

目錄結構:

一、Maven簡介

二、Maven核心概念

三、Maven的使用

四、Maven在IDEA中的應用

五、依賴管理

六、Maven常用設定

---------------------------------------分割線:正文--------------------------------------------------------

 一、Maven簡介

1、Maven可以管理jar包檔案,自動下載jar和他的文件,原始碼。

2、Maven可以管理jar包之間的依賴、jar包的版本

3、Maven的構建:

(1)清理:把之前專案編譯的東西刪除掉。

(2)編譯:把程式程式碼編譯為執行程式碼,java-class檔案

(3)測試:maven可執行測試程式程式碼,驗證你的功能是都正確

(4)報告:生成測試結果的檔案

(5)打包:把專案中所有class檔案,配置檔案等所有資源放到一個壓縮檔案中,java程式壓縮檔案通常是jar或war包

(6)安裝:把打包的檔案安裝到本地倉庫

(7).部署:把程式安裝好可以執行

4、Maven核心概念:

(1)POM:pom.xml,專案物件模型,控制maven構建專案的過程,管理jar依賴

(2)約定的目錄結構:maven專案的目錄和檔案的位置都是規定的

(3)座標:唯一的字串,用來表示資源

(4)依賴管理:管理專案中使用的jar檔案

(5)倉庫管理:資源存在的位置

(6)生命週期:maven構建專案的過程

(7)外掛和目標:執行maven構建的時候用的工具

(8)繼承與聚合:類似java語法

5、maven工具的安裝和配置:

(1)官網下載:

https://maven.apache.org/download.cgi

(2)解壓安裝包:非中文目錄

子目錄bin:執行程式mv.cmd

conf:maven工具配置檔案settings.xml

(3)配置環境變數:

在系統的環境變數中新增maven工具的安裝目錄,並在path中新增:

MAVEN_HOME -> D:\Program Files (x86)\apache-maven-3.8.1

path -> %MAVEN_HOME%\bin\

驗證配置成功:cmd -> mvn -v

 

二、Maven核心概念

1、maven約定的目錄結構(專案-Hello)

Hello/

    ---/src

 ------/main              #主程式java程式碼和配置檔案

    ----------/java          #程式包和包中的java檔案

    ----------/resource   #java程式中使用的配置檔案

    ------/test                #放測試程式程式碼和檔案的(可以沒有)

    ----------/java          #測試程式包和包中的java檔案

    ----------/resource  #測試java程式中使用的配置檔案

    ---/pom.xml maven的核心檔案(必有)

PS D:\javaProjects> tree Hello
卷 軟體 的資料夾 PATH 列表
卷序列號為 00000073 AEF0:3DBD
D:\JAVAPROJECTS\HELLO
└─src
    ├─main
    │  ├─java
    │  └─resources
    └─test
        ├─java
        └─resources
PS D:\javaProjects>

2、倉庫:

(1)倉庫概念:存在maven使用的jar和專案使用的jar

(2)倉庫分類:本地倉庫與遠端倉庫

(3)倉庫的使用:倉庫的使用不需人為參與,需要jar包時訪問順序:本地倉庫->私服->映象->中央倉庫

3、POM:Maven的靈魂

(1)modelVersion:目前的版本4.0

(2)groupId:組織名稱,一般為公司域名倒寫(+專案名稱)

(3)artifactId:專案名稱

(4)version:專案版本號,通常為-SNAPSHOT

(5)packaging:專案打包型別:jar、war、rar、ear、pom,預設jar

(6)<dependencies><!- -依賴- -相當於import></dependencies>
(7)properties:定義一些配置屬性,如專案編碼方式等

(8)bulid:maven構建時一些配置資訊,如編譯外掛啊的jdk版本

其中:groupId+artifactId+version為座標

https://mvnrepository.com/ 搜尋使用的中央倉庫

4、Maven生命周、Maven常用命令、Maven外掛:

(1)maven的生命週期即Maven構建專案的過程:清理、編譯、測試、報告、打包、安裝、部署的過程

(2)maven的命令:Maven可以使用命令,完成專案宣告週期的執行

(3)maven的外掛:maven命令的執行,通過相應的jar來完成

清理(會刪除原來編譯和測試的目錄),即target目錄,但是

 

三、Maven的使用

1、mvn compile:編譯src/main目錄下所有java檔案

(1)編譯時下載JAVA外掛

(2)下載外掛,存放在本機預設倉庫:C:\Users\Mr.White\.m2\repository

(3)結果在專案根目錄下生成target目錄,maven編譯的java程式,class檔案。

D:\javaProjects\Hello>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.testbk:testjava >-------------------------
[INFO] Building maven 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testjava ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testjava ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.750 s
[INFO] Finished at: 2021-04-21T22:20:01+08:00
[INFO] ------------------------------------------------------------------------

2、設定本機存放資源的目錄位置:

修改maven配置檔案,安裝目錄:/conf/setting.xml檔案,新增

<localRepository>D:/maven-repository</localRepository>

3、新增mysql資源依賴

pom檔案內新增:

    <dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.9</version>
        </dependency>
    </dependencies>

4、Maven常用命令:(必須在pom檔案所在目錄下執行)

(1)mvn clean:清理(刪除原來編譯和測試的目錄,即target目錄,但是已經install到倉庫裡的包不會刪除)

(2)mvn compile:編譯主程式(會在當前目錄下生成一個target,裡面存放編譯主程式之後生成的位元組碼檔案)main/java目錄下程式

(3)mvn test-compile:只編譯test程式 test/java目錄下的程式

(4)mvn test:測試

clean到test的部署參考:Junit單元測試

(5)mvn package:打包主程式,會編譯、測試並打包主程式(scr/main下所有java程式),放入target目錄下

[INFO] Building jar: D:\javaProjects\Hello\target\testjava-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.630 s
[INFO] Finished at: 2021-04-25T22:17:33+08:00
[INFO] ------------------------------------------------------------------------

(6)mvn install:安裝主程式,會把本工程打包,並儲存到本地倉庫中。

[INFO] Installing D:\javaProjects\Hello\target\testjava-0.0.1-SNAPSHOT.jar to C:\Users\Mr.White\.m2\repository\com\testbk\testjava\0.0.1-SNAPSHOT\testjava-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\javaProjects\Hello\pom.xml to C:\Users\Mr.White\.m2\repository\com\testbk\testjava\0.0.1-SNAPSHOT\testjava-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.078 s
[INFO] Finished at: 2021-04-25T22:44:03+08:00
[INFO] ------------------------------------------------------------------------

(7)mvn deploy:部署主程式,會把本地工程打包,按照座標儲存到本地庫,並且還儲存到私服倉庫中。(使用較少)

5、外掛配置:build :maven-compiler-plugin

<build>
    <plugins>
        <plugin>
        <!-- 指定maven編譯的jdk版本,如果不指定,maven3預設用jdk 1.5 maven2預設用jdk1.3 --> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        <compilerArgs>
        <arg>-parameters</arg>
        </compilerArgs>
        </configuration>
    </plugin>
    </plugins>
</build>

 

四、Maven在IDEA中的應用

1、idea中設定maven

idea中內建了maven,但一般不使用內建的,因為修改配置不方便;所以使用自己安裝的maven,需覆蓋idea中預設的設定,讓idea指定maven安裝位置等資訊

idea配置入口:

(配置當前工程)File - > Settings - > Build,Execution,Deployment - > Build Tools -> Maven

(配置以後新建工程)File -> New Projects Settings -> Settings for New Projects -> Build,Execution,Deployment - > Build Tools -> Maven

Maven home directory:maven的安裝目錄

User settings file:mavne安裝目錄conf/setting.xml配置檔案

Local respository:本機倉庫的目錄位置

maven自動化構建工具

Running -> JRE-1.8;VM Options:-DarchetypeCatalog=internal(提高maven建立效率,不再下載)

maven自動化構建工具

2、idea建立專案:

普通java專案:new->project->Empty Project->新建工程->Finish

maven模組:Module->New Module->Maven->Greate from archetype->maven-archetype-quickstart->新建工程->填寫maven工程的座標->Finish

等待maven自動建立工程模板

main目錄下手動建立resource包,並設定Make Directory as->Resources Root

test目錄下手動建立resource包,並設定Make Directory as->Test Resources Root

 3、idea單元測試

分別在main目錄與test目錄中建立程式與測試程式碼

package com.testbk;

public class HelloMaven {
    public int add(int n1,int n2){
        return n1+n2;
    }
    public static void main(String[] args) {
        HelloMaven hello = new HelloMaven();
        int res = hello.add(10,20);
        System.out.println("10+20="+res);
    }
}
package com.testbk;

import org.junit.Assert;
import org.junit.Test;

public class TestHelloMaven {

    @Test
    public void testAdd(){
        System.out.println("========testAdd 測試add方法=================");
        HelloMaven hello = new HelloMaven();
        int res = hello.add(10,20);
        //判斷結果是否正確
        Assert.assertEquals(30,res);
    }
}

執行程式測試通過:

maven自動化構建工具

 4、idea-maven工具視窗

使用工具視窗可完成:clean、compile、test、package、install等操作

maven自動化構建工具

 5、idea使用技巧

(1)pom檔案存在問題:

pom.xml右鍵->Maven->Reimport(單個專案重新整理)

或-右側Maven視窗->重新整理(會重新整理全部專案)

(2)刪除模組與匯入模組

右上角:Project Structure->+/-

maven自動化構建工具

 

 五、依賴管理

 1、依賴的範圍:

使用scope表示:表示依賴使用的範圍,即在maven構建的專案中的哪些階段中起作用。

值包含compile、test、provided(提供者),預設採用compile(所有階段)。如junit的依賴範圍是test

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

2、舉例使用:Mybatis-sprint/druid

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>2.0.4</version>
    </dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.22</version>
</dependency>

 

六、Maven常用設定

1、屬性設定:<properties>與</properties>內

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> :maven構建專案使用的編碼方式,避免中文亂碼

<maven.compiler.source>1.7</maven.compiler.source>:編譯程式碼使用的jdk版本

<maven.compiler.target>1.7</maven.compiler.target>:執行程式使用的jdk版本

2、全域性變數:

自定義的屬性,在<properties>中通過自定義標籤宣告變數(標籤名就是變數名),在pom.xml檔案中的其他位置,使用${標籤名}使用變數的值

自定義全域性變數一般是定義依賴的版本號,當你的專案中要使用多個相同的版本號,

先使用全域性變數定義,在使用${變數名},如spring框架

  <properties>
    <!--自定義變數,表示版本號-->
    <spring.version>5.3.6</spring.version>
  </properties>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
  </dependencies>

3.指定資源的外掛

在<build></build>中指定資源的外掛resources

(1)預設沒有使用resources的時候,maven執行編譯程式碼的時候,會把src/main/resources目錄中的檔案拷貝至target/classes目錄中。

  對於src/main/java目錄下的非java檔案不處理,不拷貝到target/classes目錄中

(2)我們的程式有需要把一些檔案放在src/main/java目錄中,當執行java程式時,需要用到src/main/java目錄中的檔案,

  需要告訴maven在mvn compile src/main/java目錄下的程式時,需要把檔案一同拷貝到target/classes目錄中。

  此時就需要在<build>中加入<resources>

    <resources>
      <resource>
        <directory>src/main/java</directory><!-- 所在的目錄-->
        <includes><!--包含目錄下的.properties,.xml檔案都會掃描到-->
        <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <!--filtering 選項false不啟用過濾器,*.property已經起到過濾的作用-->
        <filtering>false</filtering>
      </resource>
    </resources>