亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

實戰(zhàn)講解Maven安裝及基本使用詳解

 更新時間:2020年10月06日 13:35:28   作者:莊周de蝴蝶  
這篇文章主要介紹了實戰(zhàn)講解Maven安裝及基本使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Apache Maven,是一個跨平臺的軟件項目管理及自動構(gòu)建工具,由Apache軟件基金會所提供。Maven主要服務(wù)于基于Java平臺的項目構(gòu)建、依賴管理和項目信息管理。Maven的目標(biāo)是能夠讓開發(fā)者在最短的時間內(nèi)了解項目開發(fā)工作的完整狀態(tài),主要包括以下幾個方面:

•簡化項目構(gòu)建過程
•提供一個統(tǒng)一的項目構(gòu)建系統(tǒng)
•通過POM(project object model)提供一個項目的重要信息
•為最佳項目開發(fā)實踐提供一個指導(dǎo)方針

接下來本文就通過Maven的安裝、基本的指令使用和一個實際的小例子來帶你對Maven的使用有一個大體的認(rèn)識。此外,本文的樣例基于JDK1.8Maven3。

環(huán)境準(zhǔn)備

在安裝Maven之前,首先要確保本地已安裝JDK并配置好了JAVA_HOME環(huán)境變量,可以在cmd通過以下命令進行驗證:

echo %JAVA_HOME%  # 輸出 JAVA_HOME 環(huán)境變量值
java -version    # 輸出 Java 版本信息

如果正常輸出了JDK的安裝路徑及java的版本信息,那么就可以開始進行下一步了,否則,你可能需要先到官網(wǎng)下載一個JDK,并按照下圖所示配置好環(huán)境變量:

image-20201002192234454

安裝Maven

在確認(rèn)本地已安裝好了JDK并配置了環(huán)境變量后,我們就可以開始安裝Maven了,首先找到官網(wǎng),然后找到安裝包下載即可,本文以 3.6.3 版本為例:

image-20201002192643626

在下載完成后,解壓到本地文件夾即可,以我為例,我解壓在 D 盤:

image-20201002192823076

在解壓完畢后,我們先進行環(huán)境變量的配置,配置一個名為M2_HOME的環(huán)境變量,對應(yīng)值為個人的Maven文件夾位置:

image-20201002193034042

然后在Path系統(tǒng)變量中配置%M2_HOME%\bin即可:

image-20201002193354728

在配置完成并保存后,重新打開cmd,輸入以下命令進行驗證,如果均得到正確信息,便表明已經(jīng)安裝成功:

echo %M2_HOME%  # 輸出 Maven 的安裝位置
mvn -v		 	 # 輸出 Maven 的版本信息

注意

你可能會疑惑為什么我們下載了Maven3卻要配置一個名為M2_HOME的環(huán)境變量,這主要是因為在Maven1時環(huán)境變量配置為MAVEN_HOME,在Maven2時改為了M2_HOME,而在Maven3則繼續(xù)沿用了這個命名,不過在Maven3.5.0以后,官方也舍棄了M2_HOME,因此我們現(xiàn)在其實只需要在Path中配置D:\apache-maven-3.6.3\bin即可,不過本文依舊沿用了M2_HOME。

安裝目錄介紹

在正式講解Maven的使用之前,我們先熟悉一下Maven的安裝目錄中各個文件夾的內(nèi)容及作用(基于Maven3.6.3版本):

image-20201002195354101

bin

該文件夾下包含了mvn運行的腳本,這些腳本用來配置Java命令,準(zhǔn)備好classpath和相關(guān)的Java系統(tǒng)屬性,然后執(zhí)行Java命令。其中mvn是基于UNIX平臺的shell腳本,mvn.cmd是基于Windows平臺的下的運行腳本。當(dāng)我們在命令行中輸入一條mvn命令時,其實就是在調(diào)用這些腳本。此外該文件夾中還包含了mvnDebugmvnDebug.cmd這兩個文件,該腳本包含了mvn腳本所有的功能,只是多了一條MAVEN_DEBUG_OPTS的配置,用于調(diào)試Maven。除此之外,該文件夾內(nèi)還包含了m2.confmvnyjp文件,其中m2.confclassworlds的配置文件,而mvnyjp則是為了配合Yourkit profiler的使用,關(guān)于classworldsYourkit profiler,本文不做介紹,感興趣可以自行查找資料。

boot

該文件夾下只有一個plexus-classworldsjar包和其相關(guān)的license文件,plexus-classworlds是一個類加載框架,Maven使用該框架來加載自己的類庫。

conf

該文件下包含了一個我們以后接觸最多的settings.xml文件,主要用于配置代理、鏡像和插件等。

此外還包含了一個toolchains.xml配置文件和一個logging文件夾,其中toolchains.xml主要是為了方便我們指定項目所使用的JDK版本,需要配置maven-toolchains-plugin插件一起使用,而logging文件夾(內(nèi)含一個名為simplelogger.properties的配置文件)則用于配置我們在使用Maven時的日志。

lib

該文件夾下包含了所有Maven在運行時所需要的一些庫文件,這里就不做具體介紹了。

其它

此外還有LICENSE、NOTICE、README.txt用于說明開源協(xié)議和簡單介紹的文件。

實戰(zhàn)演練

下面我們就開始通過一個實際小案例來說明Maven的基本使用,為了加深對Maven中配置文件和基本指令的學(xué)習(xí),我們就不使用IDEA等集成MavenIDE了,直接使用VS CODE來進行接下來案例的講解。

首先,我們先創(chuàng)建一個名為maven的文件夾,然后通過VS CODE打開,新建一個名為pom.xml的文件夾,并在其中輸入以下內(nèi)容:

<?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>com.butterfly.maven</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- 可選 -->
  <name>a demo maven project</name> 
  
</project>

下面對該文件中的內(nèi)容進行簡單介紹:

文件的第一行是XML頭,就像HTML中也有<!DOCTYPE html>頭為了告訴標(biāo)準(zhǔn)通用標(biāo)記語言解析器如何解析文檔一般,在XML這里主要是為了指定文檔的版本和編碼方式。緊接著是project,主要聲明了一些POM相關(guān)的命名空間和xsd元素,可以方便我們在使用IDE時編輯XML文檔。在project這個根元素下還有四個同級的元素,下面再一一介紹:

  • modelVersion:制定了當(dāng)前POM模型的版本,對于Maven2和Maven3來說,這個值固定為 4.0.0。
  • groupId:定義了項目屬于哪個組,一般都是對應(yīng)公司或組織的域名反寫并加上項目名,例如公司域名為abc.com,項目名為demo,那么groupId就是com.abc.demo。
  • artifactId:定義了在當(dāng)前Maven項目中的唯一的ID,當(dāng)項目包含多個子項目時,我們就需要特別注意命名方式。
  • version:指定了當(dāng)前項目的版本,SNAPSHOT意思是快照,即代表當(dāng)前項目屬于不穩(wěn)定的版本。
  • name:聲明了一個讓用戶更容易理解的項目名稱,改元素屬于可選項。

然后,我們就開始正式編寫項目的主代碼,我們首先按照Maven規(guī)范,在maven文件夾下創(chuàng)建一個src/main/java目錄,然后在該目錄下再根據(jù)我們在XMLgroupIdartifactId的命名,創(chuàng)建文件:com/butterfly/maven/demo/Sum.java,并寫入以下內(nèi)容:

package com.butterfly.maven.demo;

public class Sum {

  private static int sum(int[] arr) {
    int sum = 0;
    for (int val : arr) {
      sum += val;
    }
    return sum;
  }

  public static void main(String[] args) {
    System.out.println(sum(new int[]{1, 3, 5, 7, 9}));
  }

}

然后在項目的根目錄下執(zhí)行mvn clean compile命令進行編譯,可以得到以下輸出(第一次執(zhí)行會下載很多插件依賴,下面輸出中省略了這些下載輸出):

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.butterfly.maven:demo >----------------------
[INFO] Building a demo maven project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo ---
[INFO] Deleting D:\Temp\maven\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo ---
[INFO] skip non existing resourceDirectory D:\Temp\maven\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Temp\maven\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.975 s
[INFO] Finished at: 2020-10-02T21:27:55+08:00
[INFO] ------------------------------------------------------------------------

其中clean用于告訴Maven清理輸出目錄target/compile告訴Maven編譯項目主代碼,從上面的輸出中也可以看出Maven首先執(zhí)行了maven-clean-plugin:2.5:clean進行刪除了target目錄,然后執(zhí)行了maven-resources-plugin:2.6:resources,由于項目中不存在resources文件,因此跳過了,最后執(zhí)行了maven-compiler-plugin:3.1:compile對主代碼進行編譯,并將編譯的結(jié)果放到target/classes目錄下,如下圖所示:

接下來,我們再編寫測試的代碼,首先我們依舊按照Maven規(guī)范,在src/目錄下繼續(xù)創(chuàng)建test/java目錄,然后在編寫正式的測試代碼之前,讓我們先引入JUnit的依賴,我們需要將pom.xml進行如下修改:

<!-- 添加在 project 根元素下 -->
<dependencies>
	<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
    <scope>test</scope>
	</dependency>
</dependencies>

然后我們就可以編寫我們的測試代碼了,我們在src/test/java/目錄下,創(chuàng)建demo/SumTest.java文件,并寫入以下內(nèi)容:

package demo;

import org.junit.Test;
import static com.butterfly.maven.demo.Sum.sum;
import static org.junit.Assert.assertEquals;

public class SumTest {

  @Test
  public void testSum() {
    assertEquals(10, sum(new int[]{1, 2, 3, 4}));
  }

}

然后我們在根目錄下開啟終端,并運行mvn clean test指令(第一次運行同樣會下載一些插件,這里也省略了這些下載輸出),可以在終端中得到以下信息:

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.butterfly.maven:demo >----------------------
[INFO] Building a demo maven project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo ---
[INFO] Deleting D:\Temp\maven\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo ---
[INFO] skip non existing resourceDirectory D:\Temp\maven\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Temp\maven\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ demo ---
[INFO] skip non existing resourceDirectory D:\Temp\maven\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ demo ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Temp\maven\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo ---
[INFO] Surefire report directory: D:\Temp\maven\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running demo.SumTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.091 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.166 s
[INFO] Finished at: 2020-10-02T22:17:30+08:00
[INFO] ------------------------------------------------------------------------

根據(jù)輸出可以發(fā)現(xiàn),執(zhí)行mvn clean test同樣也執(zhí)行了mvn clean compile中的clean、resources、compile這三個指定,不同的是,這里還多了對測試包中進行的三個操作,分別是testResourcestestCompiletest,隨后打印了執(zhí)行單元測試后的輸出,可以發(fā)現(xiàn)執(zhí)行了一個測試(即為我們建立的testSum測試方法),并且沒有失敗的測試。

注意

對于不同版本的Maven,在第一次執(zhí)行上述操作的時候,可能會有關(guān)于JDK版本方面的報錯,提示我們編譯版本過低,這時就需要在pom.xml中添加如下配置:

<!-- 添加在 project 根元素下 -->
<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
	</plugins>
</build>

此外,由于Maven在安裝依賴時,默認(rèn)是從國外網(wǎng)址下載,因此為了加快下載速度,我們需要配置國內(nèi)的鏡像,這時我們就需要對settings.xml文件進行修改,這里建議在修改之前做一個備份。打開settings.xml后,通過查找找到mirrors標(biāo)簽,然后在內(nèi)部添加如下配置即可:

<mirror>
	<id>alimaven</id>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	<mirrorOf>central</mirrorOf>    
</mirror>

還有一點需要注意的是,所有的依賴包默認(rèn)下載的位置是~/.m2/repository,這里的~代表的個人的用戶目錄,對我而言就是對應(yīng)C:/Users/zjw/.m2/repository。因此,如果不想將jar包放在 C 盤,就需要和mirrors同級,然后加入以下配置:

<localRepository>D:/jar</localRepository>

這樣,所有的依賴都會保存在D:/jar目錄下了。

打包及運行

Maven里,我們只要通過mvn clean package命令就可以對項目進行打包了(默認(rèn)打包類型為jar),我們在cmd中輸入以上指令,可以得到下面的輸出(省略了和以上指令中相同的前幾個輸出):

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo ---
[INFO] Building jar: D:\Temp\maven\target\demo-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

執(zhí)行完畢后,我們就可以在target/目錄下發(fā)現(xiàn)我們生成的jar包了。此外,如果我們想要像引用其它jar包一樣,在其它的項目中引入我們自己的jar包也是可以的,但是如果每次都要將jar包一個一個地復(fù)制到其他項目中是非常麻煩的,但是通過Maven,我們只需要一個mvn clean install命令就可以將當(dāng)前項目的jar包安裝到本地倉庫:

可以發(fā)現(xiàn)和mvn clean package相比,又多了如下幾行輸出:

[INFO] --- maven-install-plugin:2.4:install (default-install) @ demo ---
[INFO] Installing D:\Temp\maven\target\demo-1.0-SNAPSHOT.jar to D:\jar\com\butterfly\maven\demo\1.0-SNAPSHOT\demo-1.0-SNAPSHOT.jar
[INFO] Installing D:\Temp\maven\pom.xml to D:\jar\com\butterfly\maven\demo\1.0-SNAPSHOT\demo-1.0-SNAPSHOT.pom

按照信息,我們可以知道,我們生成的jar包被保存在了D:/jar/com/butterfly/maven/demo/1.0-SNAPSHOT/目錄下,我們可以打開文件資源管理器進行驗證:

image-20201002231242456

這樣,我們就可以在其它項目中,通過以下配置來引用我們自己的jar包了:

<dependency>
  <groupId>com.butterfly.maven</groupId>
  <artifactId>demo</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

不過,到目前為止,我們?nèi)匀粵]有運行主代碼中的main函數(shù)部分,由于默認(rèn)生成的jar包中缺少manifest配置,因此上文生成的jar包并沒有辦法直接運行,為了生成能夠執(zhí)行的jar包,我們還需要在pom.xml加入以下配置:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<version>1.2.1</version>
	<executions>
		<execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.                   
          	shade.resource.ManifestResourceTransformer">       					
          	<mainClass>com.butterfly.maven.demo.Sum</mainClass>
          </transformer>
        </transformers>
      </configuration>
		</execution>
	</executions>
</plugin>

再次執(zhí)行mvn clean install命令,可以發(fā)現(xiàn)target/目錄下有兩個jar包:

image-20201002233707696

其中orgin開頭的jar包則對用我們之前無法直接執(zhí)行的jar包,另外一個則是可以直接執(zhí)行的,我們可以進行測試:

image-20201002233911687

大功告成!

總結(jié)

本文簡單介紹了Maven,并講解了Maven的安裝和幾個基本的命令的使用,在之后我還會繼續(xù)講解Maven其他方面的知識,希望能夠?qū)δ阌兴鶐椭?/p>

參考資料

Maven 實戰(zhàn)

https://maven.apache.org/what-is-maven.html

到此這篇關(guān)于實戰(zhàn)講解Maven安裝及基本使用詳解的文章就介紹到這了,更多相關(guān)Maven安裝及基本使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用建造者模式實現(xiàn)辦理手機套餐功能詳解

    Java使用建造者模式實現(xiàn)辦理手機套餐功能詳解

    這篇文章主要介紹了Java使用建造者模式實現(xiàn)辦理手機套餐功能,較為詳細(xì)的描述了建造者模式的概念、原理并結(jié)合實例形式分析了Java使用建造者模式實現(xiàn)的辦理手機套餐功能具體步驟與相關(guān)操作注意事項,需要的朋友可以參考下
    2018-05-05
  • Spring init-method與destroy-method屬性的用法解析

    Spring init-method與destroy-method屬性的用法解析

    這篇文章主要介紹了Spring init-method與destroy-method屬性的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java中關(guān)于內(nèi)部類的使用詳解

    java中關(guān)于內(nèi)部類的使用詳解

    本篇文章介紹了,在java中關(guān)于內(nèi)部類的使用詳解。需要的朋友 參考下
    2013-04-04
  • 解決springmvc項目中使用過濾器來解決請求方式為post時出現(xiàn)亂碼的問題

    解決springmvc項目中使用過濾器來解決請求方式為post時出現(xiàn)亂碼的問題

    這篇文章主要介紹了springmvc項目中使用過濾器來解決請求方式為post時出現(xiàn)亂碼的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 通過實例解析Spring Ioc項目實現(xiàn)過程

    通過實例解析Spring Ioc項目實現(xiàn)過程

    這篇文章主要介紹了Spring Ioc項目實踐過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Java中的三種校驗注解的使用(@Valid,@Validated和@PathVariable)

    Java中的三種校驗注解的使用(@Valid,@Validated和@PathVariable)

    本文主要介紹了Java中的三種校驗注解的使用(@Valid,@Validated和@PathVariable),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 詳解IDEA社區(qū)版(Community)和付費版(UItimate)的區(qū)別

    詳解IDEA社區(qū)版(Community)和付費版(UItimate)的區(qū)別

    這篇文章主要介紹了詳解IDEA社區(qū)版(Community)和付費版(UItimate)的區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Web容器啟動過程中如何執(zhí)行Java類

    Web容器啟動過程中如何執(zhí)行Java類

    這篇文章主要介紹了Web容器啟動過程中如何執(zhí)行Java類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn)

    SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn)

    本文主要介紹了SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 詳解Java字符型常量和字符串常量的區(qū)別

    詳解Java字符型常量和字符串常量的區(qū)別

    Java 中的字符型常量和字符串常量是兩種不同的數(shù)據(jù)類型,本文將給大家詳細(xì)介紹一下Java字符型常量和字符串常量的區(qū)別,文中通過代碼講解的非常詳細(xì),需要的朋友可以參考下
    2023-10-10

最新評論