1. 依賴管理概念
Maven 依賴管理是 Maven 軟件中最重要的功能之一。Maven 的依賴管理能夠幫助開發(fā)人員自動(dòng)解決軟件包依賴問題,使得開發(fā)人員能夠輕松地將其他開發(fā)人員開發(fā)的模塊或第三方框架集成到自己的應(yīng)用程序或模塊中,避免出現(xiàn)版本沖突和依賴缺失等問題。
我們通過定義 POM 文件,Maven 能夠自動(dòng)解析項(xiàng)目的依賴關(guān)系,并通過 Maven 倉庫自動(dòng)下載和管理依賴,從而避免了手動(dòng)下載和管理依賴的繁瑣工作和可能引發(fā)的版本沖突問題。
總之,Maven 的依賴管理是 Maven 軟件的一個(gè)核心功能之一,使得軟件包依賴的管理和使用更加智能和方便,簡化了開發(fā)過程中的工作,并提高了軟件質(zhì)量和可維護(hù)性。
2. Maven工程核心信息配置和解讀(GAVP)
位置:pom.xml
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成, 如com.companyname.project-group,maven會(huì)將該項(xiàng)目打成的jar包放本地路徑:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來區(qū)分的 -->
<artifactId>project</artifactId>
<!-- 版本號(hào) -->
<version>1.0.0</version>
<!--打包方式
默認(rèn):jar
jar指的是普通的java項(xiàng)目打包方式! 項(xiàng)目打成jar包!
war指的是web項(xiàng)目打包方式!項(xiàng)目打成war包!
pom不會(huì)講項(xiàng)目打包!這個(gè)項(xiàng)目作為父工程,被其他工程聚合或者繼承!后面會(huì)講解兩個(gè)概念
-->
<packaging>jar/pom/war</packaging>
3. Maven工程依賴管理配置
位置:pom.xml
依賴管理和依賴添加
<!--
通過編寫依賴jar包的gav必要屬性,引入第三方依賴!
scope屬性是可選的,可以指定依賴生效范圍!
依賴信息查詢方式:
1. maven倉庫信息官網(wǎng) https://mvnrepository.com/
2. mavensearch插件搜索
-->
<dependencies>
<!-- 引入具體的依賴包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<!-- 依賴范圍 -->
<scope>runtime</scope>
</dependency>
</dependencies>
依賴版本統(tǒng)一提取和維護(hù)
<!--聲明版本-->
<properties>
<!--命名隨便,內(nèi)部制定版本號(hào)即可!-->
<junit.version>4.12</junit.version>
<!-- 也可以通過 maven規(guī)定的固定的key,配置maven的參數(shù)!如下配置編碼格式!-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!--引用properties聲明版本 -->
<version>${junit.version}</version>
</dependency>
</dependencies>
4. 依賴范圍
通過設(shè)置坐標(biāo)的依賴范圍(scope),可以設(shè)置 對(duì)應(yīng)jar包的作用范圍:編譯環(huán)境、測試環(huán)境、運(yùn)行環(huán)境
依賴范圍 | 描述 |
---|---|
compile | 編譯依賴范圍,scope 元素的缺省值。使用此依賴范圍的 Maven 依賴,對(duì)于三種 classpath 均有效,即該 Maven 依賴在上述三種 classpath 均會(huì)被引入。例如,log4j 在編譯、測試、運(yùn)行過程都是必須的。 |
test | 測試依賴范圍。使用此依賴范圍的 Maven 依賴,只對(duì)測試 classpath 有效。例如,Junit 依賴只有在測試階段才需要。 |
provided | 已提供依賴范圍。使用此依賴范圍的 Maven 依賴,只對(duì)編譯 classpath 和測試 classpath 有效。例如,servlet-api 依賴對(duì)于編譯、測試階段而言是需要的,但是運(yùn)行階段,由于外部容器已經(jīng)提供,故不需要 Maven 重復(fù)引入該依賴。 |
runtime | 運(yùn)行時(shí)依賴范圍。使用此依賴范圍的 Maven 依賴,只對(duì)測試 classpath、運(yùn)行 classpath 有效。例如,JDBC 驅(qū)動(dòng)實(shí)現(xiàn)依賴,其在編譯時(shí)只需 JDK 提供的 JDBC 接口即可,只有測試、運(yùn)行階段才需要實(shí)現(xiàn)了 JDBC 接口的驅(qū)動(dòng)。 |
system | 系統(tǒng)依賴范圍,其效果與 provided 的依賴范圍一致。其用于添加非 Maven 倉庫的本地依賴,通過依賴元素 dependency 中的 systemPath 元素指定本地依賴的路徑。鑒于使用其會(huì)導(dǎo)致項(xiàng)目的可移植性降低,一般不推薦使用。 |
import | 導(dǎo)入依賴范圍,該依賴范圍只能與 dependencyManagement 元素配合使用,其功能是將目標(biāo) pom.xml 文件中 dependencyManagement 的配置導(dǎo)入合并到當(dāng)前 pom.xml 的 dependencyManagement 中。 |
5. Maven工程依賴下載失敗錯(cuò)誤解決(重點(diǎn))
在使用 Maven 構(gòu)建項(xiàng)目時(shí),可能會(huì)發(fā)生依賴項(xiàng)下載錯(cuò)誤的情況,主要原因有以下幾種:
- 下載依賴時(shí)出現(xiàn)網(wǎng)絡(luò)故障或倉庫服務(wù)器宕機(jī)等原因,導(dǎo)致無法連接至 Maven 倉庫,從而無法下載依賴。
- 依賴項(xiàng)的版本號(hào)或配置文件中的版本號(hào)錯(cuò)誤,或者依賴項(xiàng)沒有正確定義,導(dǎo)致 Maven 下載的依賴項(xiàng)與實(shí)際需要的不一致,從而引發(fā)錯(cuò)誤。
- 本地 Maven 倉庫或緩存被污染或損壞,導(dǎo)致 Maven 無法正確地使用現(xiàn)有的依賴項(xiàng)。
解決方案:
-
檢查網(wǎng)絡(luò)連接和 Maven 倉庫服務(wù)器狀態(tài)。
-
確保依賴項(xiàng)的版本號(hào)與項(xiàng)目對(duì)應(yīng)的版本號(hào)匹配,并檢查 POM 文件中的依賴項(xiàng)是否正確。
-
清除本地 Maven 倉庫緩存(lastUpdated 文件),因?yàn)橹灰嬖趌astupdated緩存文件,刷新也不會(huì)重新下載。本地倉庫中,根據(jù)依賴的gav屬性依次向下查找文件夾,最終刪除內(nèi)部的文件,刷新重新下載即可!
例如: pom.xml依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version> </dependency>
文件:
-
或者可以將清除lastUpdated文件的操作寫在一個(gè)腳本文件中,手動(dòng)創(chuàng)建文件"clearLastUpdated.bat",名字任意,但是后綴必須是bat,將以下內(nèi)容復(fù)制到文件中
主要修改 3 4 行
cls
@ECHO OFF
SET CLEAR_PATH=D:
SET CLEAR_DIR=D:\maven-repository(本地倉庫路徑)
color 0a
TITLE ClearLastUpdated For Windows
GOTO MENU
:MENU
CLS
ECHO.
ECHO. * * * * ClearLastUpdated For Windows * * * *
ECHO. * *
ECHO. * 1 清理*.lastUpdated *
ECHO. * *
ECHO. * 2 查看*.lastUpdated *
ECHO. * *
ECHO. * 3 退 出 *
ECHO. * *
ECHO. * * * * * * * * * * * * * * * * * * * * * * * *
ECHO.
ECHO.請(qǐng)輸入選擇項(xiàng)目的序號(hào):
set /p ID=
IF "%id%"=="1" GOTO cmd1
IF "%id%"=="2" GOTO cmd2
IF "%id%"=="3" EXIT
PAUSE
:cmd1
ECHO. 開始清理
%CLEAR_PATH%
cd %CLEAR_DIR%
for /r %%i in (*.lastUpdated) do del %%i
ECHO.OK
PAUSE
GOTO MENU
:cmd2
ECHO. 查看*.lastUpdated文件
%CLEAR_PATH%
cd %CLEAR_DIR%
for /r %%i in (*.lastUpdated) do echo %%i
ECHO.OK
PAUSE
GOTO MENU
6. Maven工程Build構(gòu)建配置
項(xiàng)目構(gòu)建是指將源代碼、依賴庫和資源文件等轉(zhuǎn)換成可執(zhí)行或可部署的應(yīng)用程序的過程,在這個(gè)過程中包括編譯源代碼、鏈接依賴庫、打包和部署等多個(gè)步驟。
默認(rèn)情況下,構(gòu)建不需要額外配置,都有對(duì)應(yīng)的缺省配置。當(dāng)然了,我們也可以在pom.xml定制一些配置,來修改默認(rèn)構(gòu)建的行為和產(chǎn)物!
例如:
- 指定構(gòu)建打包文件的名稱,非默認(rèn)名稱
- 制定構(gòu)建打包時(shí),指定包含文件格式和排除文件
- 打包插件版本過低,配置更高版本插件
構(gòu)建配置是在pom.xml / build標(biāo)簽中指定!
指定打包命名
<!-- 默認(rèn)的打包名稱:artifactid+verson.打包方式 -->
<build>
<finalName>定義打包名稱</finalName>
</build>
指定打包文件
在配置文件 resources 中創(chuàng)建一個(gè) test.xml
創(chuàng)建一些內(nèi)容
進(jìn)行打包,可以看到 test.xml 也進(jìn)行了打包,因?yàn)?java 下面寫的類,下面 resources 配置文件,也會(huì)打包
但是如果將 test.xml 文件放入到 java 下,而不是 resources 下(java 下面只允許存在 java 類,resources 文件下只允許存在 配置文件)
打包后,可以看到,還是只有 User 類,并沒有 student.xml 文件被打包
如果在java文件夾中添加java類,會(huì)自動(dòng)打包編譯到classes文件夾下!
但是在java文件夾中添加xml文件,默認(rèn)不會(huì)被打包!
默認(rèn)情況下,按照maven工程結(jié)構(gòu)放置的文件會(huì)默認(rèn)被編譯和打包!
除此之外、我們可以使用resources標(biāo)簽,指定要打包資源的文件夾要把哪些靜態(tài)資源打包到 classes根目錄下!
應(yīng)用場景:mybatis中有時(shí)會(huì)將用于編寫SQL語句的映射文件和mapper接口都寫在src/main/java下的某個(gè)包中,此時(shí)映射文件就不會(huì)被打包,如何解決
<build>
<!--設(shè)置要打包的資源位置-->
<resources>
<resource>
<!--設(shè)置資源所在目錄-->
<directory>src/main/java</directory>
<includes>
<!--設(shè)置包含的資源類型,**/* 表示任意包下面的任意 xml 文件-->
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
配置依賴插件
dependencies標(biāo)簽下引入開發(fā)需要的jar包!我們可以在build/plugins/plugin標(biāo)簽引入插件!
常用的插件:修改jdk版本、tomcat插件、mybatis分頁插件、mybatis逆向工程插件等等!文章來源:http://www.zghlxwxcb.cn/news/detail-818794.html
<build>
<plugins>
<!-- java編譯插件,配jdk的編譯版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8090</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
Tomecat 添加到 maven 插件中教程,無須在單獨(dú)配置 Tomcat 了文章來源地址http://www.zghlxwxcb.cn/news/detail-818794.html
到了這里,關(guān)于基于IDEA 進(jìn)行Maven依賴管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!