欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:java Maven 總結(jié)

柚子快報(bào)激活碼778899分享:java Maven 總結(jié)

http://yzkb.51969.com/

文章目錄

第一章 Maven概述第一節(jié) 為什么要學(xué)習(xí)Maven?1、從『構(gòu)建』角度解釋①個(gè)人開發(fā)流程②團(tuán)隊(duì)開發(fā)流程

2、從『依賴』角度解釋①jar包的規(guī)模②jar包的來(lái)源③jar包之間的依賴關(guān)系

第二節(jié) What?什么是Maven?第二節(jié) 什么是Maven?1、構(gòu)建……

2、依賴3、Maven的工作機(jī)制

第二章 Maven核心程序解壓和配置第一節(jié) Maven核心程序解壓與配置1、解壓Maven核心程序2、指定本地倉(cāng)庫(kù)3、配置阿里云提供的鏡像倉(cāng)庫(kù)4、配置Maven工程的基礎(chǔ)JDK版本

第二節(jié) 配置環(huán)境變量1、檢查JAVA_HOME配置是否正確2、配置MAVEN_HOME3、配置PATH4、驗(yàn)證

第三章 使用Maven:命令行環(huán)境第一節(jié) 實(shí)驗(yàn)一:根據(jù)坐標(biāo)創(chuàng)建Maven工程1、Maven核心概念:坐標(biāo)①數(shù)學(xué)中的坐標(biāo)②Maven中的坐標(biāo)[1]向量說(shuō)明[2]三個(gè)向量的取值方式

③坐標(biāo)和倉(cāng)庫(kù)中jar包的存儲(chǔ)路徑之間的對(duì)應(yīng)關(guān)系

2、實(shí)驗(yàn)操作①創(chuàng)建目錄作為后面操作的工作空間②在工作空間目錄下打開命令行窗口③使用命令生成Maven工程④調(diào)整

3、Maven核心概念:POM①含義②思想③對(duì)應(yīng)的配置文件

4、Maven核心概念:約定的目錄結(jié)構(gòu)①各個(gè)目錄的作用②約定目錄結(jié)構(gòu)的意義③約定大于配置

第二節(jié) 實(shí)驗(yàn)二:在Maven工程中編寫代碼1、主體程序①自動(dòng)生成的pom.xml解讀②編寫主體程序

2、測(cè)試程序

第三節(jié) 實(shí)驗(yàn)三:執(zhí)行Maven的構(gòu)建命令1、要求2、清理操作3、編譯操作4、測(cè)試操作5、打包操作6、安裝操作

第四節(jié) 實(shí)驗(yàn)四:創(chuàng)建Maven版的Web工程1、說(shuō)明2、操作3、生成的pom.xml4、生成的Web工程的目錄結(jié)構(gòu)5、創(chuàng)建Servlet①在main目錄下創(chuàng)建java目錄②在java目錄下創(chuàng)建Servlet類所在的包的目錄③在包下創(chuàng)建Servlet類④在web.xml中注冊(cè)Servlet

6、在index.jsp頁(yè)面編寫超鏈接7、編譯8、配置對(duì)servlet-api.jar包的依賴9、將Web工程打包為war包10、將war包部署到Tomcat上運(yùn)行

第五節(jié) 實(shí)驗(yàn)五:讓W(xué)eb工程依賴Java工程1、觀念2、操作3、在Web工程中,編寫測(cè)試代碼①補(bǔ)充創(chuàng)建目錄②確認(rèn)Web工程依賴了junit③創(chuàng)建測(cè)試類

4、執(zhí)行Maven命令①測(cè)試命令②打包命令③查看當(dāng)前Web工程所依賴的jar包的列表④以樹形結(jié)構(gòu)查看當(dāng)前Web工程的依賴信息

第六節(jié) 實(shí)驗(yàn)六:測(cè)試依賴范圍1、依賴范圍①compile和test對(duì)比②compile和provided對(duì)比③結(jié)論

2、測(cè)試①驗(yàn)證test范圍對(duì)main目錄無(wú)效②驗(yàn)證test和provided范圍不參與服務(wù)器部署③驗(yàn)證provided范圍對(duì)測(cè)試程序有效

第七節(jié) 實(shí)驗(yàn)七:測(cè)試依賴的傳遞性1、依賴的傳遞性①概念②傳遞的原則

2、使用compile范圍依賴spring-core3、驗(yàn)證test和provided范圍不能傳遞

第八節(jié) 實(shí)驗(yàn)八:測(cè)試依賴的排除1、概念2、配置方式3、測(cè)試

第九節(jié) 實(shí)驗(yàn)九:繼承1、概念2、作用3、舉例4、操作①創(chuàng)建父工程②創(chuàng)建模塊工程③查看被添加新內(nèi)容的父工程pom.xml④解讀子工程的pom.xml⑤在父工程中配置依賴的統(tǒng)一管理⑥子工程中引用那些被父工程管理的依賴⑦在父工程中升級(jí)依賴信息的版本⑧在父工程中聲明自定義屬性

5、實(shí)際意義

第十節(jié) 實(shí)驗(yàn)十:聚合1、聚合本身的含義2、Maven中的聚合3、好處4、聚合的配置5、依賴循環(huán)問(wèn)題

第四章 使用Maven:IDEA環(huán)境第一節(jié) 創(chuàng)建父工程第二節(jié) 配置Maven信息第三節(jié) 創(chuàng)建模塊工程第四節(jié) 創(chuàng)建Web工程1、創(chuàng)建模塊2、修改打包方式3、增加目錄4、借助IDEA生成web.xml

第五節(jié) 其他操作1、在IDEA中執(zhí)行Maven命令2、在IDEA中查看某個(gè)模塊的依賴信息

第五章 jar包下載失敗問(wèn)題的解決方案第一節(jié) 提出問(wèn)題第二節(jié) Maven正常下載的做法第三節(jié) 下載失敗的第一種情況1、Maven的行為描述2、解決辦法3、要求Maven重新下載jar包

第四節(jié) 下載失敗的第二種情況1、文件校驗(yàn)工具2、用法3、原理4、找到有嫌疑的jar包5、為什么不建議刪整個(gè)庫(kù)

第一章 Maven概述

第一節(jié) 為什么要學(xué)習(xí)Maven?

1、從『構(gòu)建』角度解釋

①個(gè)人開發(fā)流程

②團(tuán)隊(duì)開發(fā)流程

引申:更大范圍內(nèi)的團(tuán)隊(duì)協(xié)作

2、從『依賴』角度解釋

①jar包的規(guī)模

隨著我們使用越來(lái)越多的框架,或者框架封裝程度越來(lái)越高,項(xiàng)目中使用的jar包也越來(lái)越多。項(xiàng)目中,一個(gè)模塊里面用到上百個(gè)jar包是非常正常的。

②jar包的來(lái)源

這個(gè)jar包所屬技術(shù)的官網(wǎng)。官網(wǎng)通常是英文界面,網(wǎng)站的結(jié)構(gòu)又不盡相同,甚至找到下載鏈接還發(fā)現(xiàn)需要通過(guò)特殊的工具下載。 第三方網(wǎng)站提供下載。問(wèn)題是不規(guī)范,在使用過(guò)程中會(huì)出現(xiàn)各種問(wèn)題。

jar包的名稱jar包的版本jar包內(nèi)的具體細(xì)節(jié)

③jar包之間的依賴關(guān)系

框架中使用的jar包,不僅數(shù)量龐大,而且彼此之間存在錯(cuò)綜復(fù)雜的依賴關(guān)系。依賴關(guān)系的復(fù)雜程度,已經(jīng)上升到了完全不能靠人力手動(dòng)解決的程度。另外,jar包之間有可能產(chǎn)生沖突。進(jìn)一步增加了我們?cè)趈ar包使用過(guò)程中的難度。

到目前為止,我們熟悉的jar包之間依賴關(guān)系有下面這些例子:

junit-4.12依賴hamcrest-core-1.3thymeleaf-3.0.12.RELEASE依賴ognl-3.1.26

ognl-3.1.26依賴javassist-3.20.0-GA thymeleaf-3.0.12.RELEASE依賴attoparser-2.0.5.RELEASEthymeleaf-3.0.12.RELEASE依賴unbescape-1.1.6.RELEASEthymeleaf-3.0.12.RELEASE依賴slf4j-api-1.7.26

而實(shí)際上jar包之間的依賴關(guān)系是普遍存在的,如果要由程序員手動(dòng)梳理無(wú)疑會(huì)增加極高的學(xué)習(xí)成本,而這些工作又對(duì)實(shí)現(xiàn)業(yè)務(wù)功能毫無(wú)幫助。

第二節(jié) What?什么是Maven?

第二節(jié) 什么是Maven?

Maven是Apache軟件基金會(huì)組織維護(hù)的一款專門為Java項(xiàng)目提供構(gòu)建和依賴管理支持的工具。

1、構(gòu)建

Java項(xiàng)目開發(fā)過(guò)程中,構(gòu)建指的是使用『原材料生產(chǎn)產(chǎn)品』的過(guò)程。

原材料

Java源代碼 基于HTML的Thymeleaf文件 圖片 配置文件 …… 產(chǎn)品

一個(gè)可以在服務(wù)器上運(yùn)行的項(xiàng)目

構(gòu)建過(guò)程包含的主要的環(huán)節(jié):

清理:刪除上一次構(gòu)建的結(jié)果,為下一次構(gòu)建做好準(zhǔn)備編譯:Java源程序編譯成*.class字節(jié)碼文件測(cè)試:運(yùn)行提前準(zhǔn)備好的測(cè)試程序報(bào)告:針對(duì)剛才測(cè)試的結(jié)果生成一個(gè)全面的信息打包

Java工程:jar包Web工程:war包 安裝:把一個(gè)Maven工程安裝到Maven倉(cāng)庫(kù)部署:將準(zhǔn)備好的jar包或war包部署到服務(wù)器上運(yùn)行

2、依賴

如果A工程里面用到了B工程的類、接口、配置文件等等這樣的資源,那么我們就可以說(shuō)A依賴B。例如:

junit-4.12依賴hamcrest-core-1.3thymeleaf-3.0.12.RELEASE依賴ognl-3.1.26

ognl-3.1.26依賴javassist-3.20.0-GA thymeleaf-3.0.12.RELEASE依賴attoparser-2.0.5.RELEASEthymeleaf-3.0.12.RELEASE依賴unbescape-1.1.6.RELEASEthymeleaf-3.0.12.RELEASE依賴slf4j-api-1.7.26

依賴管理中要解決的具體問(wèn)題:

jar包的下載:使用Maven之后,jar包會(huì)從規(guī)范的遠(yuǎn)程倉(cāng)庫(kù)下載到本地jar包之間的依賴:通過(guò)依賴的傳遞性自動(dòng)完成jar包之間的沖突:通過(guò)對(duì)依賴的配置進(jìn)行調(diào)整,讓某些jar包不會(huì)被導(dǎo)入

3、Maven的工作機(jī)制

第二章 Maven核心程序解壓和配置

第一節(jié) Maven核心程序解壓與配置

1、解壓Maven核心程序

核心程序壓縮包:apache-maven-3.5.4-bin.zip,解壓到非中文、沒(méi)有空格的目錄。例如:

在解壓目錄中,我們需要著重關(guān)注Maven的核心配置文件:conf/settings.xml

2、指定本地倉(cāng)庫(kù)

本地倉(cāng)庫(kù)默認(rèn)值:用戶家目錄/.m2/repository。由于本地倉(cāng)庫(kù)的默認(rèn)位置是在用戶的家目錄下,而家目錄往往是在C盤,也就是系統(tǒng)盤。將來(lái)Maven倉(cāng)庫(kù)中jar包越來(lái)越多,倉(cāng)庫(kù)體積越來(lái)越大,可能會(huì)拖慢C盤運(yùn)行速度,影響系統(tǒng)性能。所以建議將Maven的本地倉(cāng)庫(kù)放在其他盤符下。配置方式如下:

D:\maven-rep1026

本地倉(cāng)庫(kù)這個(gè)目錄,我們手動(dòng)創(chuàng)建一個(gè)空的目錄即可。

記?。阂欢ㄒ裭ocalRepository標(biāo)簽從注釋中拿出來(lái)。

注意:本地倉(cāng)庫(kù)本身也需要使用一個(gè)非中文、沒(méi)有空格的目錄。

3、配置阿里云提供的鏡像倉(cāng)庫(kù)

Maven下載jar包默認(rèn)訪問(wèn)境外的中央倉(cāng)庫(kù),速度很慢。改成阿里云提供的鏡像倉(cāng)庫(kù),訪問(wèn)國(guó)內(nèi)網(wǎng)站,可以讓Maven下載jar包的時(shí)候速度更快。配置的方式是:將下面mirror標(biāo)簽整體復(fù)制到mirrors標(biāo)簽的內(nèi)部。

nexus-aliyun

central

Nexus aliyun

http://maven.aliyun.com/nexus/content/groups/public

4、配置Maven工程的基礎(chǔ)JDK版本

如果按照默認(rèn)配置運(yùn)行,Java工程使用的JDK版本是1.5。配置的方式是:將profile標(biāo)簽整個(gè)復(fù)制到profiles標(biāo)簽內(nèi)。

jdk-1.8

true

1.8

1.8

1.8

1.8

第二節(jié) 配置環(huán)境變量

1、檢查JAVA_HOME配置是否正確

Maven是一個(gè)用Java語(yǔ)言開發(fā)的程序,它必須基于JDK來(lái)運(yùn)行,需要通過(guò)JAVA_HOME來(lái)找到JDK的安裝位置。

可以使用下面的命令驗(yàn)證:

C:\Users\Administrator>echo %JAVA_HOME%

D:\software\Java

C:\Users\Administrator>java -version

java version "1.8.0_141"

Java(TM) SE Runtime Environment (build 1.8.0_141-b15)

Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)

2、配置MAVEN_HOME

配置環(huán)境變量的規(guī)律:

XXX_HOME指向的是bin目錄的上一級(jí)

PATH指向的是bin目錄

3、配置PATH

4、驗(yàn)證

C:\Users\Administrator>mvn -v

Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)

Maven home: D:\software\apache-maven-3.5.4\bin\..

Java version: 1.8.0_141, vendor: Oracle Corporation, runtime: D:\software\Java\jre

Default locale: zh_CN, platform encoding: GBK

OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

第三章 使用Maven:命令行環(huán)境

第一節(jié) 實(shí)驗(yàn)一:根據(jù)坐標(biāo)創(chuàng)建Maven工程

學(xué)習(xí)命令行操作作為將來(lái)在IDEA中使用圖形化界面操作的過(guò)渡。使用命令行可以不受IDEA這樣的環(huán)境的干擾,這樣就有一個(gè)純凈的測(cè)試Maven功能的環(huán)境。我們的目標(biāo)是通過(guò)命令學(xué)習(xí)Maven的功能和用法。

1、Maven核心概念:坐標(biāo)

①數(shù)學(xué)中的坐標(biāo)

使用x、y、z三個(gè)“向量”作為空間的坐標(biāo)系,可以在空間中唯一的定位到一個(gè)點(diǎn)。

②Maven中的坐標(biāo)

[1]向量說(shuō)明

使用三個(gè)向量在Maven的倉(cāng)庫(kù)中唯一的定位到一個(gè)jar包。

groupId:公司或組織的idartifactId:一個(gè)項(xiàng)目或者是項(xiàng)目中的一個(gè)模塊的idversion:版本號(hào)

[2]三個(gè)向量的取值方式

groupId:公司或組織域名的倒序,通常也會(huì)加上項(xiàng)目名稱

例如:com.atguigu.maven artifactId:模塊的名稱,將來(lái)作為Maven工程的工程名version:模塊的版本號(hào),根據(jù)自己的需要設(shè)定

例如:SNAPSHOT表示快照版本,正在迭代過(guò)程中,不穩(wěn)定的版本例如:RELEASE表示正式版本

舉例:

groupId:com.atguigu.mavenartifactId:pro01-atguigu-mavenversion:1.0-SNAPSHOT

③坐標(biāo)和倉(cāng)庫(kù)中jar包的存儲(chǔ)路徑之間的對(duì)應(yīng)關(guān)系

坐標(biāo):

javax.servlet

servlet-api

2.5

上面坐標(biāo)對(duì)應(yīng)的jar包在Maven本地倉(cāng)庫(kù)中的位置:

Maven本地倉(cāng)庫(kù)根目錄\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

一定要學(xué)會(huì)根據(jù)坐標(biāo)到本地倉(cāng)庫(kù)中找到對(duì)應(yīng)的jar包。

2、實(shí)驗(yàn)操作

①創(chuàng)建目錄作為后面操作的工作空間

例如:D:\maven-workspace\space210323

②在工作空間目錄下打開命令行窗口

③使用命令生成Maven工程

運(yùn)行mvn archetype:generate命令

下面根據(jù)提示操作

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 7:【直接回車,使用默認(rèn)值】

Define value for property ‘groupId’: com.atguigu.maven

Define value for property ‘a(chǎn)rtifactId’: pro01-maven-java

Define value for property ‘version’ 1.0-SNAPSHOT: :【直接回車,使用默認(rèn)值】

Define value for property ‘package’ com.atguigu.maven: :【直接回車,使用默認(rèn)值】

Confirm properties configuration: groupId: com.atguigu.maven artifactId: pro01-maven-java version: 1.0-SNAPSHOT package: com.atguigu.maven Y: :【直接回車,表示確認(rèn)】

④調(diào)整

Maven默認(rèn)生成的工程,對(duì)junit依賴的是較低的3.8.1版本,我們可以改成4.12版本。

自動(dòng)生成的App.java和AppTest.java可以刪除。

junit

junit

4.12

test

3、Maven核心概念:POM

①含義

POM:Project Object Model,項(xiàng)目對(duì)象模型。和POM類似的是:DOM:Document Object Model,文檔對(duì)象模型。

②思想

POM表示將工程抽象為一個(gè)模型,再用程序中的對(duì)象來(lái)描述這個(gè)模型。這樣我們就可以用程序來(lái)管理項(xiàng)目了。我們?cè)陂_發(fā)過(guò)程中,最基本的做法就是將現(xiàn)實(shí)生活中的事物抽象為模型,然后封裝模型相關(guān)的數(shù)據(jù)作為一個(gè)對(duì)象,這樣就可以在程序中計(jì)算與現(xiàn)實(shí)事物相關(guān)的數(shù)據(jù)。

③對(duì)應(yīng)的配置文件

POM理念集中體現(xiàn)在Maven工程根目錄下pom.xml這個(gè)配置文件中。所以這個(gè)pom.xml配置文件就是Maven工程的核心配置文件。其實(shí)學(xué)習(xí)Maven就是學(xué)這個(gè)文件怎么配置,各個(gè)配置有什么用。

4、Maven核心概念:約定的目錄結(jié)構(gòu)

①各個(gè)目錄的作用

另外還有一個(gè)target目錄專門存放構(gòu)建操作輸出的結(jié)果。

②約定目錄結(jié)構(gòu)的意義

Maven為了讓構(gòu)建過(guò)程能夠盡可能自動(dòng)化完成,所以必須約定目錄結(jié)構(gòu)的作用。例如:Maven執(zhí)行編譯操作,必須先去Java源程序目錄讀取Java源代碼,然后執(zhí)行編譯,最后把編譯結(jié)果存放在target目錄。

③約定大于配置

Maven對(duì)于目錄結(jié)構(gòu)這個(gè)問(wèn)題,沒(méi)有采用配置的方式,而是基于約定。這樣會(huì)讓我們?cè)陂_發(fā)過(guò)程中非常方便。如果每次創(chuàng)建Maven工程后,還需要針對(duì)各個(gè)目錄的位置進(jìn)行詳細(xì)的配置,那肯定非常麻煩。

目前開發(fā)領(lǐng)域的技術(shù)發(fā)展趨勢(shì)就是:約定大于配置,配置大于編碼。

第二節(jié) 實(shí)驗(yàn)二:在Maven工程中編寫代碼

1、主體程序

①自動(dòng)生成的pom.xml解讀

com.atguigu.maven

pro01-maven-java

1.0-SNAPSHOT

jar

pro01-maven-java

http://maven.apache.org

UTF-8

junit

junit

4.12

test

②編寫主體程序

主體程序指的是被測(cè)試的程序,同時(shí)也是將來(lái)在項(xiàng)目中真正要使用的程序。

package com.atguigu.maven;

public class Calculator {

public int sum(int i, int j){

return i + j;

}

}

2、測(cè)試程序

package com.atguigu.maven;

import org.junit.Test;

import com.atguigu.maven.Calculator;

// 靜態(tài)導(dǎo)入的效果是將Assert類中的靜態(tài)資源導(dǎo)入當(dāng)前類

// 這樣一來(lái),在當(dāng)前類中就可以直接使用Assert類中的靜態(tài)資源,不需要寫類名

import static org.junit.Assert.*;

public class CalculatorTest{

@Test

public void testSum(){

// 1.創(chuàng)建Calculator對(duì)象

Calculator calculator = new Calculator();

// 2.調(diào)用Calculator對(duì)象的方法,獲取到程序運(yùn)行實(shí)際的結(jié)果

int actualResult = calculator.sum(5, 3);

// 3.聲明一個(gè)變量,表示程序運(yùn)行期待的結(jié)果

int expectedResult = 8;

// 4.使用斷言來(lái)判斷實(shí)際結(jié)果和期待結(jié)果是否一致

// 如果一致:測(cè)試通過(guò),不會(huì)拋出異常

// 如果不一致:拋出異常,測(cè)試失敗

assertEquals(expectedResult, actualResult);

}

}

第三節(jié) 實(shí)驗(yàn)三:執(zhí)行Maven的構(gòu)建命令

1、要求

運(yùn)行Maven中和構(gòu)建操作相關(guān)的命令時(shí),必須進(jìn)入到pom.xml所在的目錄。如果沒(méi)有在pom.xml所在的目錄運(yùn)行Maven的構(gòu)建命令,那么會(huì)看到下面的錯(cuò)誤信息:

The goal you specified requires a project to execute but there is no POM in this directory

mvn -v命令和構(gòu)建操作無(wú)關(guān),只要正確配置了PATH,在任何目錄下執(zhí)行都可以。

2、清理操作

mvn clean

效果:刪除target目錄

3、編譯操作

主程序編譯:mvn compile

測(cè)試程序編譯:mvn test-compile

主體程序編譯結(jié)果存放的目錄:target/classes

測(cè)試程序編譯結(jié)果存放的目錄:target/test-classes

4、測(cè)試操作

mvn test

測(cè)試的報(bào)告會(huì)存放在target/surefire-reports目錄下

5、打包操作

mvn package

打包的結(jié)果會(huì)存放在target目錄下

6、安裝操作

mvn install

[INFO] Installing D:\maven-workspace\space201026\pro01-maven-java\target\pro01-maven-java-1.0-SNAPSHOT.jar to D:\maven-rep1026\com\atguigu\maven\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.jar

[INFO] Installing D:\maven-workspace\space201026\pro01-maven-java\pom.xml to D:\maven-rep1026\com\atguigu\maven\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.pom

安裝的效果是將本地構(gòu)建過(guò)程中生成的jar包存入Maven本地倉(cāng)庫(kù)。這個(gè)jar包在Maven倉(cāng)庫(kù)中的路徑是根據(jù)它的坐標(biāo)生成的。

坐標(biāo)信息如下:

com.atguigu.maven

pro01-maven-java

1.0-SNAPSHOT

在Maven倉(cāng)庫(kù)中生成的路徑如下:

D:\maven-rep1026\com\atguigu\maven\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.jar

另外,安裝操作還會(huì)將pom.xml文件轉(zhuǎn)換為XXX.pom文件一起存入本地倉(cāng)庫(kù)。所以我們?cè)贛aven的本地倉(cāng)庫(kù)中想看一個(gè)jar包原始的pom.xml文件時(shí),查看對(duì)應(yīng)XXX.pom文件即可,它們是名字發(fā)生了改變,本質(zhì)上是同一個(gè)文件。

第四節(jié) 實(shí)驗(yàn)四:創(chuàng)建Maven版的Web工程

1、說(shuō)明

使用mvn archetype:generate命令生成Web工程時(shí),需要使用一個(gè)專門的archetype。這個(gè)專門生成Web工程骨架的archetype可以參照官網(wǎng)看到它的用法:

參數(shù)archetypeGroupId、archetypeArtifactId、archetypeVersion用來(lái)指定現(xiàn)在使用的maven-archetype-webapp的坐標(biāo)。

2、操作

注意:如果在上一個(gè)工程的目錄下執(zhí)行mvn archetype:generate命令,那么Maven會(huì)報(bào)錯(cuò):不能在一個(gè)非pom的工程下再創(chuàng)建其他工程。所以不要再剛才創(chuàng)建的工程里再創(chuàng)建新的工程,請(qǐng)回到工作空間根目錄來(lái)操作。

然后運(yùn)行生成工程的命令:

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

下面的操作按照提示執(zhí)行:

Define value for property ‘groupId’: com.atguigu.maven Define value for property ‘a(chǎn)rtifactId’: pro02-maven-web Define value for property ‘version’ 1.0-SNAPSHOT: :【直接回車,使用默認(rèn)值】

Define value for property ‘package’ com.atguigu.maven: :【直接回車,使用默認(rèn)值】 Confirm properties configuration: groupId: com.atguigu.maven artifactId: pro02-maven-web version: 1.0-SNAPSHOT package: com.atguigu.maven Y: :【直接回車,表示確認(rèn)】

3、生成的pom.xml

確認(rèn)打包的方式是war包形式

war

4、生成的Web工程的目錄結(jié)構(gòu)

webapp目錄下有index.jsp

WEB-INF目錄下有web.xml

5、創(chuàng)建Servlet

①在main目錄下創(chuàng)建java目錄

②在java目錄下創(chuàng)建Servlet類所在的包的目錄

③在包下創(chuàng)建Servlet類

package com.atguigu.maven;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import java.io.IOException;

public class HelloServlet extends HttpServlet{

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.getWriter().write("hello maven web");

}

}

④在web.xml中注冊(cè)Servlet

helloServlet

com.atguigu.maven.HelloServlet

helloServlet

/helloServlet

6、在index.jsp頁(yè)面編寫超鏈接

Hello World!

Access Servlet

JSP全稱是Java Server Page,和Thymeleaf一樣,是服務(wù)器端頁(yè)面渲染技術(shù)。這里我們不必關(guān)心JSP語(yǔ)法細(xì)節(jié),編寫一個(gè)簡(jiǎn)單的超鏈接HTML標(biāo)簽即可。

7、編譯

執(zhí)行mvn compile命令出錯(cuò):

程序包javax.servlet.http不存在

程序包javax.servlet不存在

找不到符號(hào)

符號(hào): 類 HttpServlet

……

上面的錯(cuò)誤信息說(shuō)明:我們的Web工程用到了HttpServlet這個(gè)類,而HttpServlet這個(gè)類屬于servlet-api.jar這個(gè)jar包。此時(shí)我們說(shuō),Web工程需要依賴servlet-api.jar包。

8、配置對(duì)servlet-api.jar包的依賴

對(duì)于不知道詳細(xì)信息的依賴可以到https://mvnrepository.com/網(wǎng)站查詢。使用關(guān)鍵詞搜索,然后在搜索結(jié)果列表中選擇適合的使用。

比如,我們找到的servlet-api的依賴信息:

javax.servlet

javax.servlet-api

3.1.0

provided

這樣就可以把上面的信息加入pom.xml。重新執(zhí)行mvn compile命令。

9、將Web工程打包為war包

運(yùn)行mvn package命令,生成war包的位置如下圖所示:

10、將war包部署到Tomcat上運(yùn)行

將war包復(fù)制到Tomcat/webapps目錄下

啟動(dòng)Tomcat:

通過(guò)瀏覽器嘗試訪問(wèn):http://localhost:8080/pro02-maven-web/index.jsp

第五節(jié) 實(shí)驗(yàn)五:讓W(xué)eb工程依賴Java工程

1、觀念

明確一個(gè)意識(shí):從來(lái)只有Web工程依賴Java工程,沒(méi)有反過(guò)來(lái)Java工程依賴Web工程。本質(zhì)上來(lái)說(shuō),Web工程依賴的Java工程其實(shí)就是Web工程里導(dǎo)入的jar包。最終Java工程會(huì)變成jar包,放在Web工程的WEB-INF/lib目錄下。

2、操作

在pro02-maven-web工程的pom.xml中,找到dependencies標(biāo)簽,在dependencies標(biāo)簽中做如下配置:

com.atguigu.maven

pro01-maven-java

1.0-SNAPSHOT

3、在Web工程中,編寫測(cè)試代碼

①補(bǔ)充創(chuàng)建目錄

pro02-maven-wb\src\test\java\com\atguigu\maven

②確認(rèn)Web工程依賴了junit

junit

junit

4.12

test

③創(chuàng)建測(cè)試類

把Java工程的CalculatorTest.java類復(fù)制到pro02-maven-wb\src\test\java\com\atguigu\maven目錄下

4、執(zhí)行Maven命令

①測(cè)試命令

mvn test

說(shuō)明:測(cè)試操作中會(huì)提前自動(dòng)執(zhí)行編譯操作,測(cè)試成功就說(shuō)明編譯也是成功的。

②打包命令

mvn package

通過(guò)查看war包內(nèi)的結(jié)構(gòu),我們看到被Web工程依賴的Java工程確實(shí)是會(huì)變成Web工程的WEB-INF/lib目錄下的jar包。

③查看當(dāng)前Web工程所依賴的jar包的列表

mvn dependency:list

[INFO] The following files have been resolved: [INFO] org.hamcrest:hamcrest-core:jar:1.3:test [INFO] javax.servlet:javax.servlet-api:jar:3.1.0:provided [INFO] com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile [INFO] junit:junit:jar:4.12:test

說(shuō)明:javax.servlet:javax.servlet-api:jar:3.1.0:provided格式顯示的是一個(gè)jar包的坐標(biāo)信息。格式是:

groupId:artifactId:打包方式:version:依賴的范圍

這樣的格式雖然和我們XML配置文件中坐標(biāo)的格式不同,但是本質(zhì)上還是坐標(biāo)信息,大家需要能夠認(rèn)識(shí)這樣的格式,將來(lái)從Maven命令的日志或錯(cuò)誤信息中看到這樣格式的信息,就能夠識(shí)別出來(lái)這是坐標(biāo)。進(jìn)而根據(jù)坐標(biāo)到Maven倉(cāng)庫(kù)找到對(duì)應(yīng)的jar包,用這樣的方式解決我們遇到的報(bào)錯(cuò)的情況。

④以樹形結(jié)構(gòu)查看當(dāng)前Web工程的依賴信息

mvn dependency:tree

[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT [INFO] ± junit:junit:jar:4.12:test [INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test [INFO] ± javax.servlet:javax.servlet-api:jar:3.1.0:provided [INFO] - com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile

我們?cè)趐om.xml中并沒(méi)有依賴hamcrest-core,但是它卻被加入了我們依賴的列表。原因是:junit依賴了hamcrest-core,然后基于依賴的傳遞性,hamcrest-core被傳遞到我們的工程了。

第六節(jié) 實(shí)驗(yàn)六:測(cè)試依賴范圍

1、依賴范圍

標(biāo)簽的位置:dependencies/dependency/scope

標(biāo)簽的可選值:compile/test/provided

①compile和test對(duì)比

main目錄(空間)test目錄(空間)開發(fā)過(guò)程(時(shí)間)部署到服務(wù)器(時(shí)間)compile有效有效有效有效test無(wú)效有效有效無(wú)效

②compile和provided對(duì)比

main目錄(空間)test目錄(空間)開發(fā)過(guò)程(時(shí)間)部署到服務(wù)器(時(shí)間)compile有效有效有效有效provided有效有效有效無(wú)效

③結(jié)論

compile:通常使用的第三方框架的jar包這樣在項(xiàng)目實(shí)際運(yùn)行時(shí)真正要用到的jar包都是以compile范圍進(jìn)行依賴的。比如SSM框架所需jar包。

test:測(cè)試過(guò)程中使用的jar包,以test范圍依賴進(jìn)來(lái)。比如junit。

provided:在開發(fā)過(guò)程中需要用到的“服務(wù)器上的jar包”通常以provided范圍依賴進(jìn)來(lái)。比如servlet-api、jsp-api。而這個(gè)范圍的jar包之所以不參與部署、不放進(jìn)war包,就是避免和服務(wù)器上已有的同類jar包產(chǎn)生沖突,同時(shí)減輕服務(wù)器的負(fù)擔(dān)。說(shuō)白了就是:“服務(wù)器上已經(jīng)有了,你就別帶啦!”

2、測(cè)試

①驗(yàn)證test范圍對(duì)main目錄無(wú)效

測(cè)試方式:在主體程序中導(dǎo)入org.junit.Test這個(gè)注解,然后執(zhí)行編譯。

具體操作:在pro01-maven-java\src\main\java\com\atguigu\maven目錄下修改Calculator.java

package com.atguigu.maven;

import org.junit.Test;

public class Calculator {

public int sum(int i, int j){

return i + j;

}

}

執(zhí)行Maven編譯命令:

[ERROR] /D:/maven-workspace/space201026/pro01-maven-java/src/main/java/com/atguigu/maven/Calculator.java:[3,17] 程序包org.junit不存在

②驗(yàn)證test和provided范圍不參與服務(wù)器部署

其實(shí)就是驗(yàn)證:通過(guò)compile范圍依賴的jar包會(huì)放入war包,通過(guò)test范圍依賴的jar包不會(huì)放入war包。

③驗(yàn)證provided范圍對(duì)測(cè)試程序有效

測(cè)試方式是在pro02-maven-web的測(cè)試程序中加入servlet-api.jar包中的類。

修改:pro02-maven-web\src\test\java\com\atguigu\maven\CalculatorTest.java

package com.atguigu.maven;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletException;

import org.junit.Test;

import com.atguigu.maven.Calculator;

// 靜態(tài)導(dǎo)入的效果是將Assert類中的靜態(tài)資源導(dǎo)入當(dāng)前類

// 這樣一來(lái),在當(dāng)前類中就可以直接使用Assert類中的靜態(tài)資源,不需要寫類名

import static org.junit.Assert.*;

public class CalculatorTest{

@Test

public void testSum(){

// 1.創(chuàng)建Calculator對(duì)象

Calculator calculator = new Calculator();

// 2.調(diào)用Calculator對(duì)象的方法,獲取到程序運(yùn)行實(shí)際的結(jié)果

int actualResult = calculator.sum(5, 3);

// 3.聲明一個(gè)變量,表示程序運(yùn)行期待的結(jié)果

int expectedResult = 8;

// 4.使用斷言來(lái)判斷實(shí)際結(jié)果和期待結(jié)果是否一致

// 如果一致:測(cè)試通過(guò),不會(huì)拋出異常

// 如果不一致:拋出異常,測(cè)試失敗

assertEquals(expectedResult, actualResult);

}

}

然后運(yùn)行Maven的編譯命令:mvn compile

然后看到編譯成功。

第七節(jié) 實(shí)驗(yàn)七:測(cè)試依賴的傳遞性

1、依賴的傳遞性

①概念

A依賴B,B依賴C,那么在A沒(méi)有配置對(duì)C的依賴的情況下,A里面能不能直接使用C?

②傳遞的原則

在A依賴B,B依賴C的前提下,C是否能夠傳遞到A,取決于B依賴C時(shí)使用的依賴范圍。

B依賴C時(shí)使用compile范圍:可以傳遞B依賴C時(shí)使用test或provided范圍:不能傳遞,所以需要這樣的jar包時(shí),就必須在需要的地方明確配置依賴才可以。

2、使用compile范圍依賴spring-core

測(cè)試方式:讓pro01-maven-java工程依賴spring-core

具體操作:編輯pro01-maven-java工程根目錄下pom.xml

org.springframework

spring-core

4.0.0.RELEASE

使用mvn dependency:tree命令查看效果:

[INFO] com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT [INFO] ± junit:junit:jar:4.12:test [INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test [INFO] - org.springframework:spring-core:jar:4.0.0.RELEASE:compile [INFO] - commons-logging:commons-logging:jar:1.1.1:compile

還可以在Web工程中,使用mvn dependency:tree命令查看效果(需要重新將pro01-maven-java安裝到倉(cāng)庫(kù)):

[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT [INFO] ± junit:junit:jar:4.12:test [INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test [INFO] ± javax.servlet:javax.servlet-api:jar:3.1.0:provided [INFO] - com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile [INFO] - org.springframework:spring-core:jar:4.0.0.RELEASE:compile [INFO] - commons-logging:commons-logging:jar:1.1.1:compile

3、驗(yàn)證test和provided范圍不能傳遞

從上面的例子已經(jīng)能夠看到,pro01-maven-java依賴了junit,但是在pro02-maven-web工程中查看依賴樹的時(shí)候并沒(méi)有看到j(luò)unit。

要驗(yàn)證provided范圍不能傳遞,可以在pro01-maven-java工程中加入servlet-api的依賴。

javax.servlet

javax.servlet-api

3.1.0

provided

效果還是和之前一樣:

[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT [INFO] ± junit:junit:jar:4.12:test [INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test [INFO] ± javax.servlet:javax.servlet-api:jar:3.1.0:provided [INFO] - com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile [INFO] - org.springframework:spring-core:jar:4.0.0.RELEASE:compile [INFO] - commons-logging:commons-logging:jar:1.1.1:compile

第八節(jié) 實(shí)驗(yàn)八:測(cè)試依賴的排除

1、概念

當(dāng)A依賴B,B依賴C而且C可以傳遞到A的時(shí)候,但是A不想要C,需要在A里面把C排除掉。而往往這種情況都是為了避免jar包之間的沖突。

所以配置依賴的排除其實(shí)就是阻止某些jar包的傳遞。因?yàn)檫@樣的jar包傳遞過(guò)來(lái)會(huì)和其他jar包沖突。

2、配置方式

com.atguigu.maven

pro01-maven-java

1.0-SNAPSHOT

compile

commons-logging

commons-logging

3、測(cè)試

測(cè)試的方式:在pro02-maven-web工程中配置對(duì)commons-logging的排除

com.atguigu.maven

pro01-maven-java

1.0-SNAPSHOT

compile

commons-logging

commons-logging

運(yùn)行mvn dependency:tree命令查看效果:

[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT [INFO] ± junit:junit:jar:4.12:test [INFO] | - org.hamcrest:hamcrest-core:jar:1.3:test [INFO] ± javax.servlet:javax.servlet-api:jar:3.1.0:provided [INFO] - com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile [INFO] - org.springframework:spring-core:jar:4.0.0.RELEASE:compile

發(fā)現(xiàn)在spring-core下面就沒(méi)有commons-logging了。

第九節(jié) 實(shí)驗(yàn)九:繼承

1、概念

Maven工程之間,A工程繼承B工程

B工程:父工程A工程:子工程

本質(zhì)上是A工程的pom.xml中的配置繼承了B工程中pom.xml的配置。

2、作用

在父工程中統(tǒng)一管理項(xiàng)目中的依賴信息,具體來(lái)說(shuō)是管理依賴信息的版本。

3、舉例

在一個(gè)工程中依賴多個(gè)Spring的jar包

[INFO] ± org.springframework:spring-core:jar:4.0.0.RELEASE:compile [INFO] | - commons-logging:commons-logging:jar:1.1.1:compile [INFO] ± org.springframework:spring-beans:jar:4.0.0.RELEASE:compile [INFO] ± org.springframework:spring-context:jar:4.0.0.RELEASE:compile [INFO] ± org.springframework:spring-expression:jar:4.0.0.RELEASE:compile [INFO] ± org.springframework:spring-aop:jar:4.0.0.RELEASE:compile [INFO] | - aopalliance:aopalliance:jar:1.0:compile

使用Spring時(shí)要求所有Spring自己的jar包版本必須一致。為了能夠?qū)@些jar包的版本進(jìn)行統(tǒng)一管理,我們使用繼承這個(gè)機(jī)制,將所有版本信息統(tǒng)一在父工程中進(jìn)行管理。

4、操作

①創(chuàng)建父工程

創(chuàng)建的過(guò)程和前面創(chuàng)建pro01-maven-java一樣。

工程名稱:pro03-maven-parent

工程創(chuàng)建好之后,要修改它的打包方式:

com.atguigu.maven

pro03-maven-parent

1.0-SNAPSHOT

pom

只有打包方式為pom的Maven工程能夠管理其他Maven工程。

②創(chuàng)建模塊工程

模塊工程類似于IDEA中的module,所以需要進(jìn)入pro03-maven-parent工程的根目錄,然后運(yùn)行mvn archetype:generate命令來(lái)創(chuàng)建模塊工程。

假設(shè),我們創(chuàng)建三個(gè)模塊工程:

③查看被添加新內(nèi)容的父工程pom.xml

下面modules和module標(biāo)簽是聚合功能的配置

pro04-maven-module

pro05-maven-module

pro06-maven-module

④解讀子工程的pom.xml

com.atguigu.maven

pro03-maven-parent

1.0-SNAPSHOT

pro04-maven-module

⑤在父工程中配置依賴的統(tǒng)一管理

org.springframework

spring-core

4.0.0.RELEASE

org.springframework

spring-beans

4.0.0.RELEASE

org.springframework

spring-context

4.0.0.RELEASE

org.springframework

spring-expression

4.0.0.RELEASE

org.springframework

spring-aop

4.0.0.RELEASE

⑥子工程中引用那些被父工程管理的依賴

關(guān)鍵點(diǎn):省略版本號(hào)

org.springframework

spring-core

org.springframework

spring-beans

org.springframework

spring-context

org.springframework

spring-expression

org.springframework

spring-aop

⑦在父工程中升級(jí)依賴信息的版本

……

org.springframework

spring-beans

4.1.4.RELEASE

……

然后在子工程中運(yùn)行mvn dependency:list,效果如下:

[INFO] org.springframework:spring-aop:jar:4.1.4.RELEASE:compile [INFO] org.springframework:spring-core:jar:4.1.4.RELEASE:compile [INFO] org.springframework:spring-context:jar:4.1.4.RELEASE:compile [INFO] org.springframework:spring-beans:jar:4.1.4.RELEASE:compile [INFO] org.springframework:spring-expression:jar:4.1.4.RELEASE:compile

⑧在父工程中聲明自定義屬性

UTF-8

4.3.6.RELEASE

在需要的地方使用${}的形式來(lái)引用自定義的屬性名:

org.springframework

spring-core

${atguigu.spring.version}

真正實(shí)現(xiàn)“一處修改,處處生效”。

5、實(shí)際意義

編寫一套符合要求、開發(fā)各種功能都能正常工作的依賴組合并不容易。如果公司里已經(jīng)有人總結(jié)了成熟的組合方案,那么再開發(fā)新項(xiàng)目時(shí),如果不使用原有的積累,而是重新摸索,會(huì)浪費(fèi)大量的時(shí)間。為了提高效率,我們可以使用工程繼承的機(jī)制,讓成熟的依賴組合方案能夠保留下來(lái)。

如上圖所示,公司級(jí)的父工程中管理的就是成熟的依賴組合方案,各個(gè)新項(xiàng)目、子系統(tǒng)各取所需即可。

第十節(jié) 實(shí)驗(yàn)十:聚合

1、聚合本身的含義

部分組成整體

動(dòng)畫片《戰(zhàn)神金剛》中的經(jīng)典臺(tái)詞:“我來(lái)組成頭部!我來(lái)組成手臂!”就是聚合關(guān)系最生動(dòng)的體現(xiàn)。

2、Maven中的聚合

使用一個(gè)“總工程”將各個(gè)“模塊工程”匯集起來(lái),作為一個(gè)整體對(duì)應(yīng)完整的項(xiàng)目。

項(xiàng)目:整體模塊:部分

概念的對(duì)應(yīng)關(guān)系:

從繼承關(guān)系角度來(lái)看:

父工程子工程

從聚合關(guān)系角度來(lái)看:

總工程模塊工程

3、好處

一鍵執(zhí)行Maven命令:很多構(gòu)建命令都可以在“總工程”中一鍵執(zhí)行。 以mvn install命令為例:Maven要求有父工程時(shí)先安裝父工程;有依賴的工程時(shí),先安裝依賴的工程。我們自己考慮這些規(guī)則會(huì)很麻煩。但是工程聚合之后,在總工程執(zhí)行mvn install可以一鍵完成安裝,而且會(huì)自動(dòng)按照正確的順序執(zhí)行。 配置聚合之后,各個(gè)模塊工程會(huì)在總工程中展示一個(gè)列表,讓項(xiàng)目中的各個(gè)模塊一目了然。

4、聚合的配置

在總工程中配置modules即可:

pro04-maven-module

pro05-maven-module

pro06-maven-module

5、依賴循環(huán)問(wèn)題

如果A工程依賴B工程,B工程依賴C工程,C工程又反過(guò)來(lái)依賴A工程,那么在執(zhí)行構(gòu)建操作時(shí)會(huì)報(bào)下面的錯(cuò)誤:

[ERROR] [ERROR] The projects in the reactor contain a cyclic reference:

這個(gè)錯(cuò)誤的含義是:循環(huán)引用。

第四章 使用Maven:IDEA環(huán)境

第一節(jié) 創(chuàng)建父工程

第二節(jié) 配置Maven信息

第三節(jié) 創(chuàng)建模塊工程

第四節(jié) 創(chuàng)建Web工程

1、創(chuàng)建模塊

按照前面的同樣操作創(chuàng)建模塊,此時(shí)這個(gè)模塊其實(shí)還是一個(gè)Java工程。

2、修改打包方式

war

3、增加目錄

4、借助IDEA生成web.xml

第五節(jié) 其他操作

1、在IDEA中執(zhí)行Maven命令

2、在IDEA中查看某個(gè)模塊的依賴信息

第五章 jar包下載失敗問(wèn)題的解決方案

第一節(jié) 提出問(wèn)題

Maven替我們?nèi)ハ螺djar包的時(shí)候,有可能出現(xiàn)在網(wǎng)絡(luò)傳輸過(guò)程中數(shù)據(jù)丟失、中途斷網(wǎng),從而導(dǎo)致下載失敗。

第二節(jié) Maven正常下載的做法

jar包在下載過(guò)程中,jar包的擴(kuò)展名是xxx.jar.lastUpdatedjar包下載成功后,Maven會(huì)將lastUpdated擴(kuò)展名刪除,讓jar包恢復(fù)為xxx.jar這樣的名稱

第三節(jié) 下載失敗的第一種情況

1、Maven的行為描述

jar包在下載過(guò)程中,jar包的擴(kuò)展名是xxx.jar.lastUpdated網(wǎng)絡(luò)連接丟失,無(wú)法繼續(xù)下載jar包沒(méi)有下載完,lastUpdated擴(kuò)展名不會(huì)被刪除當(dāng)我們要求Maven重新下載時(shí),Maven看到這個(gè)jar包的擴(kuò)展名是lastUpdated,Maven就不管了

2、解決辦法

手動(dòng)刪除所有以lastUpdated結(jié)尾的文件,然后讓Maven重新下載??墒钱?dāng)倉(cāng)庫(kù)中l(wèi)astUpdated文件太多的時(shí)候,手動(dòng)刪除不可行,所以我們需要借助批處理文件:clearLastUpdated.bat。使用方法:

將clearLastUpdated.bat文件復(fù)制到本地倉(cāng)庫(kù)的根目錄使用文件編輯打開clearLastUpdated.bat文件修改下面的內(nèi)容

SET CLEAR_PATH=設(shè)置為本地倉(cāng)庫(kù)所在的盤符 SET CLEAR_DIR=設(shè)置為本地倉(cāng)庫(kù)的根目錄的路徑

例如:

SET CLEAR_PATH=D: SET CLEAR_DIR=D:\maven-rep1026

在想要執(zhí)行清理時(shí),雙擊運(yùn)行這個(gè)文件即可

3、要求Maven重新下載jar包

第四節(jié) 下載失敗的第二種情況

1、文件校驗(yàn)工具

jar包表面上看起來(lái)是下載完的狀態(tài),結(jié)尾并沒(méi)有“.lastUpdated”擴(kuò)展名。但是程序運(yùn)行時(shí)找不到這個(gè)jar包中的類。例如:針對(duì)jar包中的類出現(xiàn)ClassNotFoundException。

遇到類似問(wèn)題需要先確認(rèn)一下“有嫌疑”的jar包是否存在內(nèi)部損壞問(wèn)題。此時(shí)可以使用上面的文件校驗(yàn)工具。

2、用法

打開文件校驗(yàn)工具將待校驗(yàn)的jar包拖拽到文件校驗(yàn)工具窗口內(nèi)將待校驗(yàn)的jar包旁邊的*.sha1文件打開比較兩個(gè)SHA1值一致:jar包完好不一致:jar包損壞

3、原理

HASH加密包括很多具體加密算法,但是所有HASH算法都滿足下面特征:

只要輸入數(shù)據(jù)不變,任何時(shí)候執(zhí)行加密,輸出不變輸入數(shù)據(jù)有細(xì)微變化,輸出數(shù)據(jù)跟著變化不可逆,不能通過(guò)密文反推回明文每一種具體的HASH加密算法加密后長(zhǎng)度固定

4、找到有嫌疑的jar包

假設(shè)現(xiàn)在出現(xiàn)了一個(gè)ClassNotFoundException,提示找不到類:org.springframework.expression.Expression。此時(shí)我們懷疑這個(gè)類所在的jar包下載失敗。

竅門1:類所在的package命名往往和jar包坐標(biāo)的groupId部分類似。竅門2:在IDEA中按兩下Shift鍵,使用全類名搜索

找到j(luò)ar包后,點(diǎn)右鍵→Show in Explorer

竅門3:如果前面的辦法都沒(méi)法定位,只能根據(jù)這個(gè)類看上去的特征和可能的功能找有可能有關(guān)的jar包

5、為什么不建議刪整個(gè)庫(kù)

整個(gè)庫(kù)刪除后,需要重新下載整個(gè)庫(kù)。此時(shí)東邊的jar包沒(méi)有失敗,可能西邊的jar包會(huì)失敗。整個(gè)庫(kù)整體重新下載時(shí),會(huì)有很多jar包并行下載的,相對(duì)來(lái)說(shuō)并行下載本身就容易丟失數(shù)據(jù)。

柚子快報(bào)激活碼778899分享:java Maven 總結(jié)

http://yzkb.51969.com/

參考鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18914477.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄