Java基礎(chǔ)之初識(shí)Maven
一、為什么使用Maven?
- 首先我們先靈魂拷問(wèn)一下jar包是什么?我們可以將它理解為我們寫的一個(gè)Java程序,整個(gè)Java程序中由多個(gè)Java文件和依賴組成。了解清楚這個(gè)之后,接下來(lái)介紹我們?yōu)槭裁匆褂肕aven
- 很多小伙伴學(xué)習(xí)完Maven之后還是有個(gè)疑問(wèn),它是干什么用的?所以進(jìn)入今天的內(nèi)容前,我先按照自己的理解說(shuō)明一下Maven
- Maven相當(dāng)于一個(gè)倉(cāng)庫(kù)管理員,它有本地倉(cāng)庫(kù)和云端倉(cāng)庫(kù)兩個(gè)倉(cāng)庫(kù)與,它在本地倉(cāng)庫(kù)中管理著我們創(chuàng)建的jar包,同樣的,我們可以通過(guò)遠(yuǎn)程倉(cāng)庫(kù)來(lái)使用別人的jar包,當(dāng)然了,它有屬于自己的一套規(guī)范,只有這樣,才可以讓我們通過(guò)Maven來(lái)使用別人的包
二、使用Maven的好處
既然Maven是管理jar包的,當(dāng)然了,有關(guān)jar包的一些問(wèn)題它都可以解決,比如下面的問(wèn)題:
jar包之間的依賴關(guān)系
- 前面說(shuō)了jar包相當(dāng)于一個(gè)Java程序,因此jar包往往不是孤立存在,它也需要?jiǎng)e的jar包支持才能正常工作,這就需要了解清楚jar包的依賴關(guān)系,Maven就提供了這個(gè)功能,幫助我們了解清楚依賴關(guān)系從而減少未來(lái)開(kāi)發(fā)中可能會(huì)遇到的一些問(wèn)題
jar包之間的沖突問(wèn)題
- 既然需要調(diào)用別的jar包才能工作,當(dāng)jar包之間都使用了另一個(gè)jar包的不同版本的時(shí)候,就會(huì)造成jar包沖突,別怕,Maven也可以解決這個(gè)問(wèn)題
獲取第三方的jar包
- 我們?cè)谧鲰?xiàng)目時(shí),需要調(diào)用一個(gè)三方的jar包,如果去這個(gè)jar包的網(wǎng)站上下載豈不是太麻煩了,使用Maven可以直接從中央倉(cāng)庫(kù)下載,然后就可以很方便的調(diào)用這個(gè)jar包了
將項(xiàng)目拆分為多個(gè)工程模塊
- 在項(xiàng)目開(kāi)發(fā)中,如果所有功能都使用一個(gè)工程模塊,那么需要修改某個(gè)功能就很麻煩,我們就需要將整個(gè)項(xiàng)目按照功能進(jìn)行模塊拆分,但是當(dāng)拆分后怎么相互調(diào)用和訪問(wèn)呢?使用Maven可以清晰地了解項(xiàng)目拆分的情況
實(shí)現(xiàn)項(xiàng)目的部署
- 在實(shí)際生產(chǎn)環(huán)境中,項(xiàng)目規(guī)模增加到一定程度后,可能每個(gè)模塊都需要運(yùn)行在獨(dú)立的服務(wù)器上,我們稱之為分布式部署,這里就需要用到Maven來(lái)完成項(xiàng)目的部署
三、Maven是什么?
介紹完Maven的好處之后,我們正式開(kāi)始學(xué)習(xí)Maven
Maven是自動(dòng)化構(gòu)建工具,構(gòu)建是什么呢?,以Web項(xiàng)目舉例
- 我們可以將未編譯的Web工程比喻為一只生的雞,編譯好的Web工程是一只煮熟的雞,編譯部署的過(guò)程就是將雞燉熟
- 在實(shí)際項(xiàng)目中整合第三方框架,Web工程中除了Java程序和JSP頁(yè)面、圖片等靜態(tài)資源之外,還包括第三方框架的jar包以及各種各樣的配置文件。所有這些資源都必須按照正確的目錄結(jié)構(gòu)部署到服務(wù)器上,項(xiàng)目才可以運(yùn)行
- 構(gòu)建就是以我們編寫的Java代碼、框架配置文件、國(guó)際化等其他資源文件、JSP頁(yè)面和圖片等靜態(tài)資源作為“原材料”,去“生產(chǎn)”出一個(gè)可以運(yùn)行的項(xiàng)目的過(guò)程
接下來(lái)介紹一下構(gòu)建的環(huán)節(jié)
1. 清理:刪除以前的編譯結(jié)果,為重新編譯做好準(zhǔn)備。
2.編譯:將Java源程序編譯為字節(jié)碼文件。
3.測(cè)試:針對(duì)項(xiàng)目中的關(guān)鍵點(diǎn)進(jìn)行測(cè)試,確保項(xiàng)目在迭代開(kāi)發(fā)過(guò)程中關(guān)鍵點(diǎn)的正確性。
4.報(bào)告:在每一次測(cè)試后以標(biāo)準(zhǔn)的格式記錄和展示測(cè)試結(jié)果。
5.打包:將一個(gè)包含諸多文件的工程封裝為一個(gè)壓縮文件用于安裝或部署。Java工程對(duì)應(yīng)jar包,Web工程對(duì)應(yīng)war包。
6.安裝:在Maven環(huán)境下特指將打包的結(jié)果——jar包或war包安裝到本地倉(cāng)庫(kù)中。
7.部署:將打包的結(jié)果部署到遠(yuǎn)程倉(cāng)庫(kù)或?qū)ar包部署到服務(wù)器上運(yùn)行。
我們要構(gòu)建一個(gè)jar包,就需要手動(dòng)完成上面的步驟,使用Maven就可以自動(dòng)的完成上述步驟,Maven之所以能夠?qū)崿F(xiàn)自動(dòng)化的構(gòu)建,和它的設(shè)計(jì)是緊密相關(guān)的。我們對(duì)Maven的學(xué)習(xí)就圍繞它的九個(gè)核心概念展開(kāi)
1.POM
2.約定的目錄結(jié)構(gòu)
3.坐標(biāo)
4.依賴管理
5.倉(cāng)庫(kù)管理
6.生命周期
7.插件和目標(biāo)
8.繼承
9.聚合
四、安裝Maven
第一步:我們需要下面兩個(gè)包,第一個(gè)的maven-bin.zpi這個(gè),src是源碼,我們用不到,第二個(gè)是repo,它里面包含了一些常用的依賴包

第二步:我們將這兩個(gè)包放到一個(gè)文件夾中并解壓縮一下

第三步,配置環(huán)境變量
我的電腦–>右鍵–>屬性–>高級(jí)系統(tǒng)設(shè)置–>環(huán)境變量,然后跟前面配置Java一樣,我們先新建一個(gè)HOME

第四步,添加path

第五步,測(cè)試一下是否成功:輸入命令: mvn -version

五、第一個(gè)Maven
我們先手動(dòng)創(chuàng)建一下工程,感受一下,然后我再介紹怎么使用IDEA創(chuàng)建Maven工程
第一步:創(chuàng)建約定的目錄結(jié)構(gòu)
Hello src ——main ————java ————resources ——test ————java ————resources pom.xml /* main目錄用于存放主程序。 test目錄用于存放測(cè)試程序。 java目錄用于存放源代碼文件。 resources目錄用于存放配置文件和資源文件 */
第二步:創(chuàng)建Maven的核心配置文件pom.xml,先直接復(fù)制就好
<?xml version="1.0" ?> <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.company.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Hello</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> </project>
第三步:編寫主代碼,在src/main/java/com/company/maven目錄下新建文件Hello.java
package com.company.maven;
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
第四步:編寫測(cè)試代碼,在/src/test/java/com/company/maven目錄下新建測(cè)試文件HelloTest.java
package com.company.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
@Test
public void testHello(){
Hello hello = new Hello();
String results = hello.sayHello("atguigu");
assertEquals("Hello atguigu!",results);
}
}
第五步:運(yùn)行幾個(gè)基本的Maven命令,運(yùn)行Maven命令時(shí)一定要進(jìn)入pom.xml文件所在的目錄
打開(kāi)cmd命令行,進(jìn)入Hello項(xiàng)目根目錄(pom.xml文件所在目錄)執(zhí)行mvn compile命令,查看根目錄變化 cmd 中繼續(xù)錄入mvn clean命令,然后再次查看根目錄變化 cmd 中錄入 mvn compile命令, 查看根目錄變化 cmd 中錄入 mvn test-compile命令, 查看target目錄的變化 cmd 中錄入 mvn test命令,查看target目錄變化 cmd 中錄入 mvn package命令,查看target目錄變化 cmd 中錄入 mvn install命令, 查看本地倉(cāng)庫(kù)的目錄變化
六、Maven本地倉(cāng)庫(kù)的配置
- Maven的核心程序并不包含具體功能,僅負(fù)責(zé)宏觀調(diào)度。具體功能由插件來(lái)完成。Maven核心程序會(huì)到本地倉(cāng)庫(kù)中查找插件。如果本地倉(cāng)庫(kù)中沒(méi)有就會(huì)從遠(yuǎn)程中央倉(cāng)庫(kù)下載。此時(shí)如果不能上網(wǎng)則無(wú)法執(zhí)行Maven的具體功能。為了解決這個(gè)問(wèn)題,我們可以將Maven的本地倉(cāng)庫(kù)指向一個(gè)在聯(lián)網(wǎng)情況下下載好的目錄
- Maven默認(rèn)的本地倉(cāng)庫(kù):~.m2\repository目錄
- Maven的核心配置文件位置:就在我們解壓目錄中的conf\setting.xml文件中
<localRepository>以及準(zhǔn)備好的倉(cāng)庫(kù)位置</localRepository>

記得前面那個(gè)repo.zip么,我們將這個(gè)目錄添加到配置文件中

因?yàn)镸aven是國(guó)外開(kāi)發(fā)的,所以它的中央倉(cāng)庫(kù)也是在國(guó)外,我們要安裝相關(guān)的jar可能需要翻墻(其實(shí)可以加個(gè)配置,使用國(guó)內(nèi)的鏡像倉(cāng)庫(kù)就好)直接在setting中添加下面的配置信息,我添加的是阿里的鏡像源,后面會(huì)講這個(gè)知識(shí)點(diǎn),先照著我的寫
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
七、IDEA配置Maven
前面手動(dòng)創(chuàng)建只是為了讓大家了解它的構(gòu)造,我們實(shí)際開(kāi)發(fā)中當(dāng)然不可能這么麻煩,直接在IDEA中配置就好
第一步,打開(kāi)Maven的配置設(shè)

第二步,設(shè)置maven的安裝目錄及本地倉(cāng)庫(kù)

第三步,勾選配置

八、第二個(gè)Maven
第一步:新建一個(gè)項(xiàng)目MavenProject,直接右鍵,建立一個(gè)空白文件夾

第二步:右鍵→new Module→Maven→創(chuàng)建一個(gè)Hello工程模塊


main目錄用于存放主程序。 test目錄用于存放測(cè)試程序。 java目錄用于存放源代碼文件。 resources目錄用于存放配置文件和資源文件
第三步 : 配置Maven的核心配置文件pom.xml
<?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 公司域名倒敘+項(xiàng)目名稱 -->
<groupId>com.company.helloworld</groupId>
<!-- 模塊名稱 -->
<artifactId>Hello</artifactId>
<!-- 版本號(hào) -->
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 添加第三方j(luò)ar包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
第四步:編寫主代碼,在src/main/java目錄下新建文件Hello.java
package com.atguigu.maven;
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
第五步:編寫測(cè)試代碼,在/src/test/java目錄下新建測(cè)試文件HelloTest.java
package com.company.helloworld;
import org.junit.Test;
public class HelloTest {
@Test
public void testHello(){
Hello hello = new Hello();
String maven = hello.sayHello("Maven");
System.out.println(maven);
}
}
第六步:使用Maven的方式運(yùn)行Maven工程,在右側(cè)那個(gè)Maven中

九、Maven打包插件
在我們打包我們的項(xiàng)目時(shí),默認(rèn)是不會(huì)將我們使用的依賴進(jìn)行打包的,如果想要將我們程序所需要的依賴連同我們的項(xiàng)目一起打包,Maven也可以做到,只需要將下面的內(nèi)容放到pom.xml中就好了
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 指定主類 -->
<mainClass>xxx.xxx.XXX</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
十、總結(jié)
本章主要介紹了Maven的基本使用,學(xué)到這里我們要清楚知道,Maven就是為了方便工程管理的,它就是一個(gè)倉(cāng)庫(kù)管理員,有本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù),可以讓我們方便是使用別人開(kāi)發(fā)好的jar包,也可以讓我們進(jìn)行項(xiàng)目的部署與管理。
到此這篇關(guān)于Java基礎(chǔ)之初識(shí)Maven的文章就介紹到這了,更多相關(guān)Java Maven內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Idea配置Maven阿里云鏡像加速的實(shí)現(xiàn)
- Jenkins+maven持續(xù)集成的實(shí)現(xiàn)
- idea導(dǎo)入maven工程的三種方法
- IDEA 2021版新建Maven、TomCat工程的詳細(xì)教程
- Java基礎(chǔ)之Maven詳解
- 教你如何把Eclipse創(chuàng)建的Web項(xiàng)目(非Maven)導(dǎo)入Idea
- Java使用Maven BOM統(tǒng)一管理版本號(hào)的實(shí)現(xiàn)
- 詳解idea maven nexus 常見(jiàn)命令配置
- 淺談Maven的build生命周期和常用plugin
相關(guān)文章
mybatis使用Integer類型查詢可能出現(xiàn)的問(wèn)題
這篇文章主要介紹了mybatis使用Integer類型查詢可能出現(xiàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
自定義application.yml配置項(xiàng)方式
這篇文章主要介紹了自定義application.yml配置項(xiàng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
java?Semaphore共享鎖實(shí)現(xiàn)原理解析
這篇文章主要為大家介紹了Semaphore共享鎖實(shí)現(xiàn)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Spring Boot 2.4新特性減少95%內(nèi)存占用問(wèn)題
這篇文章主要介紹了Spring Boot 2.4新特性減少95%內(nèi)存占用問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12

