Java基礎之初識Maven

一、為什麼使用Maven?

  • 首先我們先靈魂拷問一下jar包是什麼?我們可以將它理解為我們寫的一個Java程序,整個Java程序中由多個Java文件和依賴組成。瞭解清楚這個之後,接下來介紹我們為什麼要使用Maven
  • 很多小夥伴學習完Maven之後還是有個疑問,它是幹什麼用的?所以進入今天的內容前,我先按照自己的理解說明一下Maven
  • Maven相當於一個倉庫管理員,它有本地倉庫和雲端倉庫兩個倉庫與,它在本地倉庫中管理著我們創建的jar包,同樣的,我們可以通過遠程倉庫來使用別人的jar包,當然瞭,它有屬於自己的一套規范,隻有這樣,才可以讓我們通過Maven來使用別人的包

二、使用Maven的好處

既然Maven是管理jar包的,當然瞭,有關jar包的一些問題它都可以解決,比如下面的問題:

jar包之間的依賴關系

  • 前面說瞭jar包相當於一個Java程序,因此jar包往往不是孤立存在,它也需要別的jar包支持才能正常工作,這就需要瞭解清楚jar包的依賴關系,Maven就提供瞭這個功能,幫助我們瞭解清楚依賴關系從而減少未來開發中可能會遇到的一些問題

jar包之間的沖突問題

  • 既然需要調用別的jar包才能工作,當jar包之間都使用瞭另一個jar包的不同版本的時候,就會造成jar包沖突,別怕,Maven也可以解決這個問題

獲取第三方的jar包

  • 我們在做項目時,需要調用一個三方的jar包,如果去這個jar包的網站上下載豈不是太麻煩瞭,使用Maven可以直接從中央倉庫下載,然後就可以很方便的調用這個jar包瞭

將項目拆分為多個工程模塊

  • 在項目開發中,如果所有功能都使用一個工程模塊,那麼需要修改某個功能就很麻煩,我們就需要將整個項目按照功能進行模塊拆分,但是當拆分後怎麼相互調用和訪問呢?使用Maven可以清晰地瞭解項目拆分的情況

實現項目的部署

  • 在實際生產環境中,項目規模增加到一定程度後,可能每個模塊都需要運行在獨立的服務器上,我們稱之為分佈式部署,這裡就需要用到Maven來完成項目的部署

三、Maven是什麼?

介紹完Maven的好處之後,我們正式開始學習Maven

Maven是自動化構建工具,構建是什麼呢?,以Web項目舉例

  • 我們可以將未編譯的Web工程比喻為一隻生的雞,編譯好的Web工程是一隻煮熟的雞,編譯部署的過程就是將雞燉熟
  • 在實際項目中整合第三方框架,Web工程中除瞭Java程序和JSP頁面、圖片等靜態資源之外,還包括第三方框架的jar包以及各種各樣的配置文件。所有這些資源都必須按照正確的目錄結構部署到服務器上,項目才可以運行
  • 構建就是以我們編寫的Java代碼、框架配置文件、國際化等其他資源文件、JSP頁面和圖片等靜態資源作為“原材料”,去“生產”出一個可以運行的項目的過程

接下來介紹一下構建的環節

1. 清理:刪除以前的編譯結果,為重新編譯做好準備。

2.編譯:將Java源程序編譯為字節碼文件。

3.測試:針對項目中的關鍵點進行測試,確保項目在迭代開發過程中關鍵點的正確性。

4.報告:在每一次測試後以標準的格式記錄和展示測試結果。

5.打包:將一個包含諸多文件的工程封裝為一個壓縮文件用於安裝或部署。Java工程對應jar包,Web工程對應war包。

6.安裝:在Maven環境下特指將打包的結果——jar包或war包安裝到本地倉庫中。

7.部署:將打包的結果部署到遠程倉庫或將war包部署到服務器上運行。

我們要構建一個jar包,就需要手動完成上面的步驟,使用Maven就可以自動的完成上述步驟,Maven之所以能夠實現自動化的構建,和它的設計是緊密相關的。我們對Maven的學習就圍繞它的九個核心概念展開

1.POM

2.約定的目錄結構

3.坐標

4.依賴管理

5.倉庫管理

6.生命周期

7.插件和目標

8.繼承

9.聚合

四、安裝Maven

第一步:我們需要下面兩個包,第一個的maven-bin.zpi這個,src是源碼,我們用不到,第二個是repo,它裡面包含瞭一些常用的依賴包

在這裡插入圖片描述

第二步:我們將這兩個包放到一個文件夾中並解壓縮一下

在這裡插入圖片描述

第三步,配置環境變量

我的電腦–>右鍵–>屬性–>高級系統設置–>環境變量,然後跟前面配置Java一樣,我們先新建一個HOME

在這裡插入圖片描述
第四步,添加path
在這裡插入圖片描述

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

在這裡插入圖片描述

五、第一個Maven

我們先手動創建一下工程,感受一下,然後我再介紹怎麼使用IDEA創建Maven工程

第一步:創建約定的目錄結構

Hello
	 src
	 ——main
	 ————java
	 ————resources
	 ——test
	 ————java
	 ————resources
	 pom.xml
/*
main目錄用於存放主程序。
test目錄用於存放測試程序。
java目錄用於存放源代碼文件。
resources目錄用於存放配置文件和資源文件
*/

第二步:創建Maven的核心配置文件pom.xml,先直接復制就好

<?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+"!";
	}
}

第四步:編寫測試代碼,在/src/test/java/com/company/maven目錄下新建測試文件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);	
		}
	}

第五步:運行幾個基本的Maven命令,運行Maven命令時一定要進入pom.xml文件所在的目錄

打開cmd命令行,進入Hello項目根目錄(pom.xml文件所在目錄)執行mvn compile命令,查看根目錄變化
cmd 中繼續錄入mvn clean命令,然後再次查看根目錄變化
cmd 中錄入 mvn  compile命令, 查看根目錄變化
cmd 中錄入 mvn  test-compile命令, 查看target目錄的變化
cmd 中錄入 mvn  test命令,查看target目錄變化
cmd 中錄入 mvn  package命令,查看target目錄變化
cmd 中錄入 mvn  install命令, 查看本地倉庫的目錄變化

六、Maven本地倉庫的配置

  • Maven的核心程序並不包含具體功能,僅負責宏觀調度。具體功能由插件來完成。Maven核心程序會到本地倉庫中查找插件。如果本地倉庫中沒有就會從遠程中央倉庫下載。此時如果不能上網則無法執行Maven的具體功能。為瞭解決這個問題,我們可以將Maven的本地倉庫指向一個在聯網情況下下載好的目錄
  • Maven默認的本地倉庫:~.m2\repository目錄
  • Maven的核心配置文件位置:就在我們解壓目錄中的conf\setting.xml文件中

<localRepository>以及準備好的倉庫位置</localRepository>

在這裡插入圖片描述

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

在這裡插入圖片描述

因為Maven是國外開發的,所以它的中央倉庫也是在國外,我們要安裝相關的jar可能需要翻墻(其實可以加個配置,使用國內的鏡像倉庫就好)直接在setting中添加下面的配置信息,我添加的是阿裡的鏡像源,後面會講這個知識點,先照著我的寫

<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

前面手動創建隻是為瞭讓大傢瞭解它的構造,我們實際開發中當然不可能這麼麻煩,直接在IDEA中配置就好
第一步,打開Maven的配置設

在這裡插入圖片描述

第二步,設置maven的安裝目錄及本地倉庫

在這裡插入圖片描述

第三步,勾選配置

在這裡插入圖片描述

八、第二個Maven

第一步:新建一個項目MavenProject,直接右鍵,建立一個空白文件夾

在這裡插入圖片描述

第二步:右鍵→new Module→Maven→創建一個Hello工程模塊

在這裡插入圖片描述

在這裡插入圖片描述

main目錄用於存放主程序。
test目錄用於存放測試程序。
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 公司域名倒敘+項目名稱  -->
    <groupId>com.company.helloworld</groupId>
    <!-- 模塊名稱  -->
    <artifactId>Hello</artifactId>
    <!-- 版本號 -->
    <version>1.0-SNAPSHOT</version>
    <dependencies>
       <!-- 添加第三方jar包  -->
        <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+"!";
    }
}

第五步:編寫測試代碼,在/src/test/java目錄下新建測試文件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的方式運行Maven工程,在右側那個Maven中

在這裡插入圖片描述

九、Maven打包插件

在我們打包我們的項目時,默認是不會將我們使用的依賴進行打包的,如果想要將我們程序所需要的依賴連同我們的項目一起打包,Maven也可以做到,隻需要將下面的內容放到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>

十、總結

本章主要介紹瞭Maven的基本使用,學到這裡我們要清楚知道,Maven就是為瞭方便工程管理的,它就是一個倉庫管理員,有本地倉庫和遠程倉庫,可以讓我們方便是使用別人開發好的jar包,也可以讓我們進行項目的部署與管理。

到此這篇關於Java基礎之初識Maven的文章就介紹到這瞭,更多相關Java Maven內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: