五、Maven
目錄:Maven項(xiàng)目架構(gòu)管理工具、下載安裝Maven、配置環(huán)境變量、阿里云鏡像、本地倉(cāng)庫(kù)、在IDEA中使用Maven、補(bǔ)充:在IDEA中配置Tomcat、pom文件、可能遇到的問(wèn)題
1.Maven項(xiàng)目架構(gòu)管理工具
學(xué)習(xí)此技術(shù)的原因:
①在JavaWeb開發(fā)中,需要使用大量的jar包,手動(dòng)去導(dǎo)入。
②用一個(gè)東西自動(dòng)導(dǎo)入和配置jar包。
目前用就是為了方便導(dǎo)入jar包的。
Maven的核心思想:約定大于配置。
Maven會(huì)規(guī)定好如何去編寫Java代碼,必須要按照這個(gè)規(guī)范來(lái)。有約束,不要去違反。
2.下載安裝Maven
Maven官網(wǎng):https://maven.apache.org

下載完成后解壓即可。
3.配置環(huán)境變量
在系統(tǒng)環(huán)境變量中,配置環(huán)境變量:
①M(fèi)2_HOME Maven目錄下的bin目錄
②MAVEN_HOME Maven的目錄
③在系統(tǒng)的Path中配置%MAVEN_HOME%\bin
具體操作:右擊我的電腦——>屬性——>高級(jí)系統(tǒng)設(shè)置——>環(huán)境變量——>系統(tǒng)變量 新建——>變量名為M2_HOME,變量值為Maven目錄下的bin目錄——>繼續(xù)新建——>變量名為MAVEN_HOME,變量值為Maven的目錄。配置PATH變量:雙擊PATH——>新建——>內(nèi)容為%MAVEN_HOME%\bin。








打開控制臺(tái)——>輸入mvn -version,測(cè)試Maven是否安裝成功,必須保證配置完成。
4.阿里云鏡像
鏡像:mirrors
作用加速下載。
國(guó)內(nèi)建議使用阿里云的鏡像。
在conf文件夾中的settings.xml中的<mirrors>添加:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
5.本地倉(cāng)庫(kù)
本地倉(cāng)庫(kù)就是在本地的倉(cāng)庫(kù),可以聯(lián)想到遠(yuǎn)程倉(cāng)庫(kù)。
建立一個(gè)本地倉(cāng)庫(kù):localRepository
在Maven目錄中新建一個(gè)文件夾maven-repo。

在conf文件夾中的settings.xml中添加:
<localRepository>D:\Maven\apache-maven-3.6.3\maven-repo</localRepository>
其中為maven-repo的路徑。
6.在IDEA中使用Maven
1)用模板創(chuàng)建一個(gè)Maven項(xiàng)目
Create New Project——>Maven——>檢查Java是否配置好,勾選Create from archetype,選擇下面的maven-archetypr-webapp——>填寫項(xiàng)目名稱和項(xiàng)目地址,并填寫GAV——>選擇Maven的地址、用戶設(shè)置文件和本地倉(cāng)庫(kù)(IDEA有自帶的Maven)——>Finish




等待項(xiàng)目的初始過(guò)程:
Ⅰ會(huì)自動(dòng)導(dǎo)入包。

Ⅱ出現(xiàn)BUILD SUCCESS說(shuō)明項(xiàng)目創(chuàng)建成功了。

觀察Maven倉(cāng)庫(kù)中多出的東西。
IDEA中的Maven設(shè)置:File——>Settings——>Build,Execution,Deployment——>Maven


注意:經(jīng)常在IDEA中會(huì)出現(xiàn)一個(gè)問(wèn)題,就是項(xiàng)目自動(dòng)創(chuàng)建完成后,這個(gè)MavenHome會(huì)使用IDEA默認(rèn),如果發(fā)現(xiàn)了這個(gè)問(wèn)題,手動(dòng)改為本地的。
2)創(chuàng)建一個(gè)普通的Maven項(xiàng)目
Create New Project——>Maven(不勾選任何,直接Next)——>填寫項(xiàng)目名稱和項(xiàng)目地址,并填寫GAV——>Finish


模板方式生成的,只有在web應(yīng)用下才會(huì)有。
對(duì)比這個(gè)普通的Maven項(xiàng)目,模板創(chuàng)建的Maven項(xiàng)目在main中創(chuàng)建文件夾java和resources就完整了。
3)標(biāo)記文件夾功能
①右擊文件夾——>Mark Directory as
ⅠSources Root 源碼目錄
ⅡTest Sources Root 測(cè)試源碼目錄
ⅢResources Root 資源目錄
ⅣTest Resources Root 測(cè)試資源目錄
②File——>Project Structure…——>Modules——>點(diǎn)擊項(xiàng)目——>選中文件夾——>標(biāo)記

java編譯成class文件放在不同的文件夾中,放在target目錄里。
在模板創(chuàng)建的Maven項(xiàng)目中去除pom.xml中的<scope>test</scope>會(huì)繼續(xù)下載。
補(bǔ)充:三、5.在IDEA中配置Tomcat
右上角配置——>點(diǎn)擊加號(hào)——>Tomcat Server——>Local——>Name改為Tomcat 9,確認(rèn)配置——>警告點(diǎn)擊Fix——>點(diǎn)擊加號(hào)——>Artifact…——>選擇war或war exploded




解決警告問(wèn)題:
問(wèn)題的原因:訪問(wèn)一個(gè)網(wǎng)站,需要指定一個(gè)文件夾名字。(必須要的配置)
注:Application content可以寫,也可以不寫。默認(rèn)訪問(wèn)路徑為localhost:8080。假如寫了/ping,路徑為localhost:8080/ping。這個(gè)過(guò)程叫做虛擬路徑映射。

啟動(dòng)Tomcat,訪問(wèn)到index.jsp。

7.pom文件
pom.xml是Maven的核心配置文件。

MavenWeb項(xiàng)目模板:
<?xml version="1.0" encoding="UTF-8"?>
<!--Maven版本和頭文件-->
<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>
<!--這里是自己配置的GAV-->
<groupId>ping</groupId>
<artifactId>untitled1</artifactId>
<version>1.0-SNAPSHOT</version>
<!--Package:項(xiàng)目的打包方式
jar:java應(yīng)用
war:JavaWeb應(yīng)用
-->
<packaging>war</packaging>
<!--配置-->
<properties>
<!--項(xiàng)目的默認(rèn)構(gòu)建編碼-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--編碼版本-->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--項(xiàng)目依賴-->
<dependencies>
<!--具體依賴的jar包配置文件-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<!--項(xiàng)目構(gòu)建用的東西-->
<build>
<finalName>untitled1</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Maven的高級(jí)之處在于,可以導(dǎo)入這個(gè)jar包依賴的其它jar包。
Maven由于約定大于配置,可能遇到寫的配置文件,無(wú)法被導(dǎo)出或者生效的問(wèn)題,解決方案:
<!--在build中配置resources,來(lái)防止資源導(dǎo)出失敗的問(wèn)題-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
IDEA中的其它操作:目錄樹,可以生成Maven中jar包的關(guān)聯(lián)圖。

8.可能遇到的問(wèn)題
1)用Maven3.6.2去建項(xiàng)目,所有的依賴無(wú)法導(dǎo)入,會(huì)報(bào)錯(cuò)Unable to import maven project:See logs for details,存在兼容性問(wèn)題。
解決方法:降級(jí)使用Maven3.6.1。
2)Tomcat閃退
3)IDEA中每次都要重復(fù)配置Maven
解決方法:在IDEA 中的全局默認(rèn)配置中去配置 Configure——>Settings


4)Maven項(xiàng)目中的Tomcat無(wú)法配置
5)Maven默認(rèn)Web項(xiàng)目中的web.xml版本問(wèn)題

解決方法:參考使用Tomcat里ROOT中的,替換為webapp4.0版本。
<?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"
metadata-complete="true">
</web-app>
6)Maven倉(cāng)庫(kù)的使用
倉(cāng)庫(kù)地址:http://mvnrepository.com/