一、依賴管理概念
????????Maven 依賴管理是 Maven 軟件中最重要的功能之一。Maven 的依賴管理能夠幫助開發(fā)人員自動解決軟件包依賴問題,使得開發(fā)人員能夠輕松地將其他開發(fā)人員開發(fā)的模塊或第三方框架集成到自己的應(yīng)用程序或模塊中,避免出現(xiàn)版本沖突和依賴缺失等問題。
????????我們通過定義 pom 文件,Maven 能夠自動解析項目的依賴關(guān)系,并通過 Maven 倉庫自動下載和管理依賴,從而避免了手動下載和管理依賴的繁瑣工作和可能引發(fā)的版本沖突問題。
????????總之,Maven 的依賴管理是 Maven 軟件的一個核心功能之一,使得軟件包依賴的管理和使用更加智能和方便,簡化了開發(fā)過程中的工作,并提高了軟件質(zhì)量和可維護性。
二、核心配置文件解讀
? ? ? ? 一個基本的 pom.xml 內(nèi)容如下所示:
<!-- pom 的模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者組織的唯一標(biāo)志,并且配置時生成的路徑也是由此生成, 如 com.companyname.project-group,maven 會將該項目打成的 jar 包放本地路徑:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 項目的唯一ID,一個 groupId 下面可能多個項目,就是靠 artifactId 來區(qū)分的 -->
<artifactId>project</artifactId>
<!-- 版本號 -->
<version>1.0.0</version>
<!--打包方式
默認:jar
jar 指的是普通的 java 項目打包方式! 項目打成 jar 包!
war 指的是 web 項目打包方式!項目打成 war 包!
pom 不會將項目打包!這個項目作為父工程,被其他工程聚合或者繼承!
-->
<packaging>jar/pom/war</packaging>
三、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>
? ? ? ? 也可以在 pom.xml 里面進行版本的統(tǒng)一提取和維護
<!--聲明版本-->
<properties>
<!-- 命名隨便,內(nèi)部制定版本號即可!-->
<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>
四、依賴范圍
????????通過設(shè)置坐標(biāo)的依賴范圍(scope),可以設(shè)置對應(yīng) jar 包的作用范圍:編譯環(huán)境(main 目錄下)、測試環(huán)境(test 目錄下)、運行環(huán)境(jar 或者 war 中)。
依賴范圍 | 描述 |
compile | 編譯依賴范圍,scope 元素的缺省值。使用此依賴范圍的 Maven 依賴,對于三種 classpath (上面的三種環(huán)境)均有效,即該 Maven 依賴在上述三種 classpath 均會被引入。例如,log4j 在編譯、測試、運行過程都是必須的。 |
test | 測試依賴范圍。使用此依賴范圍的 Maven 依賴,只對測試 classpath (測試環(huán)境)有效。例如,Junit 依賴只有在測試階段才需要。? |
provided | 已提供依賴范圍。使用此依賴范圍的 Maven 依賴,只對編譯 classpath 和測試 classpath 有效。例如,servlet-api 依賴對于編譯、測試階段而言是需要的,但是運行階段,由于外部容器已經(jīng)提供,故不需要 Maven 重復(fù)引入該依賴。 |
runtime | 運行時依賴范圍。使用此依賴范圍的 Maven 依賴,只對測試 classpath 和運行 classpath 有效。例如,JDBC 驅(qū)動實現(xiàn)依賴,其在編譯時只需 JDK 提供的 JDBC 接口即可,只有測試、運行階段才需要實現(xiàn)了 JDBC 接口的驅(qū)動。 |
system | 系統(tǒng)依賴范圍,其效果與 provided 的依賴范圍一致。其用于添加非 Maven 倉庫的本地依賴,通過依賴元素 dependency 中的 systemPath 元素指定本地依賴的路徑。鑒于使用其會導(dǎo)致項目的可移植性降低,一般不推薦使用。 |
import | 導(dǎo)入依賴范圍,該依賴范圍只能與 dependencyManagement 元素配合使用,其功能是將目標(biāo) pom.xml 文件中 dependencyManagement 的配置導(dǎo)入合并到當(dāng)前 pom.xml 的 dependencyManagement 中。 |
五、Maven 依賴下載失敗及解決方案
5.1?依賴下載失敗
????????在使用 Maven 構(gòu)建項目時,可能會發(fā)生依賴項下載錯誤的情況,主要原因有以下幾種:
????????1、下載依賴時出現(xiàn)網(wǎng)絡(luò)故障或倉庫服務(wù)器宕機等原因,導(dǎo)致無法連接至 Maven 倉庫,從而無法下載依賴。
????????2、依賴項的版本號或配置文件中的版本號錯誤,或者依賴項沒有正確定義,導(dǎo)致 Maven 下載的依賴項與實際需要的不一致,從而引發(fā)錯誤。
????????3、本地 Maven 倉庫或緩存被污染或損壞,導(dǎo)致 Maven 無法正確地使用現(xiàn)有的依賴項。
5.2?解決方案
5.2.1 常規(guī)解決
????????1、檢查網(wǎng)絡(luò)連接和 Maven 倉庫服務(wù)器狀態(tài)。
????????2、確保依賴項的版本號與項目對應(yīng)的版本號匹配,并檢查 POM 文件中的依賴項是否正確。
????????3、清除本地 Maven 倉庫緩存(.lastUpdated 文件),因為只要存在 lastupdated 緩存文件,刷新也不會重新下載。本地倉庫中,根據(jù)依賴的 gav 屬性依次向下查找文件夾,最終刪除內(nèi)部的文件,刷新重新下載即可!
5.2.2 腳本解決
????????可以將清除 lastUpdated 文件的操作寫在一個腳本文件中,手動創(chuàng)建文件 clearLastUpdated.bat,名字任意,但是后綴必須是 bat,將以下內(nèi)容復(fù)制到文件中。
cls
@ECHO OFF
SET CLEAR_PATH=E:
SET CLEAR_DIR=E:\repo(實體庫位置,這塊只做注釋,運行時需要刪除掉)
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.請輸入選擇項目的序號:
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
????????輸入對應(yīng)的編號即可,如下圖:
六、Maven 工程 build 構(gòu)建配置
????????項目構(gòu)建是指將源代碼、依賴庫和資源文件等轉(zhuǎn)換成可執(zhí)行或可部署的應(yīng)用程序的過程,在這個過程中包括編譯源代碼、鏈接依賴庫、打包和部署等多個步驟。
????????默認情況下,構(gòu)建不需要額外配置,都有對應(yīng)的缺省配置。當(dāng)然了,我們也可以在 pom.xml 定制一些配置,來修改默認構(gòu)建的行為和產(chǎn)物。如下:
? ? ? ? 1、指定構(gòu)建打包文件的名稱,非默認名稱
? ? ? ? 2、制定構(gòu)建打包時,指定包含文件格式和排除文件
? ? ? ? 3、打包插件版本過低,配置更高版本插件
6.1 構(gòu)建非默認名稱
? ? ? ? 在 pom.xml 中添加如下的配置就可以更改打包文件的名稱,如下:
<!-- 默認的打包名稱:artifactid+verson 打包方式 -->
<build>
<finalName>maven-web-888</finalName>
</build>
6.2 構(gòu)建包含指定文件
????????如果在 java 文件夾中添加 java 類,會自動打包編譯到 classes 文件夾下,但是如果在 java 文件夾中添加 xml 文件,默認則不會被打包。因為在默認情況下,只有按照 maven 工程結(jié)構(gòu)放置的文件會默認被編譯和打包。
? ? ? ? 例如,在 mybatis 中有時會將用于編寫 sql 語句的映射文件和 mapper 接口都寫在 src/main/java下的某個包中,此時映射文件就不會被打包,如下:
????????我們可以使用 resources 標(biāo)簽,指定要打包資源的文件夾要把哪些靜態(tài)資源打包到 classes 根目錄下,pom.xml 的內(nèi)容如下:
<build>
<!--設(shè)置要打包的資源位置-->
<resources>
<resource>
<!--設(shè)置資源所在目錄-->
<directory>src/main/java</directory>
<includes>
<!-- 設(shè)置包含的資源類型,**/*.xml 表示 java 目錄下任意的包下面的任意的以 xml 結(jié)尾的文件-->
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
? ? ? ? 再次打包,發(fā)現(xiàn)配置文件出現(xiàn)了,如下?
6.3 配置依賴插件
????????我們可以在 build/plugins/plugin 標(biāo)簽引入插件,常用的插件:修改 jdk 版本、tomcat 插件、 mybatis 分頁插件、mybatis 逆向工程插件等等。如下:
<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>
? ? ? ? 接下來我們演示下 tomcat 的插件,如下圖,配置 tomcat 插件就省去了麻煩的 tomcat 配置。文章來源:http://www.zghlxwxcb.cn/news/detail-804605.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-804605.html
到了這里,關(guān)于基于 IDEA 進行 Maven 依賴管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!