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)官網下載:
//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
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為坐標
//mvnrepository.com/ 搜索使用的中央倉庫
4、Maven生命周、Maven常用命令、Maven插件:
(1)maven的生命周期即Maven構建項目的過程:清理、編譯、測試、報告、打包、安裝、部署的過程
(2)maven的命令:Maven可以使用命令,完成項目聲明周期的執行
(3)maven的插件:maven命令的執行,通過相應的jar來完成
清理(會刪除原來編譯和測試的目錄),即target目錄,但是
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>
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:本機倉庫的目錄位置
Running -> JRE-1.8;VM Options:-DarchetypeCatalog=internal(提高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);
}
}
運行程式測試通過:
4、idea-maven工具窗口
使用工具窗口可完成:clean、compile、test、package、install等操作
5、idea使用技巧
(1)pom文件存在問題:
pom.xml右鍵->Maven->Reimport(單個項目刷新)
或-右側Maven窗口->刷新(會刷新全部項目)
(2)刪除模組與導入模組
右上角:Project Structure->+/-
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>
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>