依賴管理
依賴管理解決的問題
我們學完一個語言的語法之後,我們應該都能知道函式的引用或者類的建立等了。為了方便管理,我們就會把一些特定的功能實現寫在一個程式碼檔案中,我們只需要使用的時候匯入就行了,這樣無論是修改還是閱讀都更加的方便簡潔,但這樣會出來一個問題,一旦我們多個檔案你引用我,我引用你,就會出現蜈蚣一般的巢狀(比如A引用B,B引用C),這樣我們遷移或者打包的整個專案的時候就會很複雜,整個引用宛如迷宮一般,人工來管理就會很麻煩。這個時候Maven就能解決這個問題
Maven的作用
當我們宣告瞭A的依賴的時候,Maven會自己判斷這個模組和其他被引用的模組是否還有其他的依賴,如果有,就會自動匯入其他的依賴,不用我們去判斷是否有其他的依賴了。那我們怎麼宣告呢,就是在pom.xml
這檔案裡面
pom.xml
pom.xml
這個檔案很有用,是專案的maven的配置檔案,我們來仔細看看這個檔案
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.itranswarp.learnjava</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>17</maven.compiler.release>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.16</version>
</dependency>
</dependencies>
</project>
我們來梳理一下整檔案的結構:
我們可以分為幾個大塊
<project ...>
- 是
pom.xml
的根元素,包含了所有專案的配置資訊。 - 定義了名稱空間和模式,確保檔案遵循 Maven POM 規範。
<project ...>
所有專案的配置資訊。
</project>
整個專案自己的資訊
<modelVersion>4.0.0</modelVersion>
<groupId>com.itranswarp.learnjava</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
這些都是你管理專案的資訊
一個Maven工程就是由groupId
,artifactId
和version
作為唯一標識。
<modelVersion>
- 定義 POM 檔案的模型版本,目前通常為
4.0.0
。
<groupId>
- 表示專案的組 ID,通常是專案所屬組織的反向域名(如
com.example
)。 - 必須唯一,通常用來標識公司或組織。
<artifactId>
- 專案的唯一識別符號,表示模組或專案的名稱(如
my-app
)。 -
artifactId
應該在同一groupId
下是唯一的。
<version>
- 定義專案的版本號(如
1.0.0
)。 - 如果是開發版本,可以使用
-SNAPSHOT
標識(如1.0.0-SNAPSHOT
),表示不穩定版本。
<packaging>
- 指定專案的打包方式,預設為
jar
。 - 其他常見值有
war
(Web 應用)、pom
(父專案)等。
<properties..>
這個標籤裡面是統一管理版本號、編碼等配置。
-
project.build.sourceEncoding
:表示專案原始碼的字元編碼,通常應設定為UTF-8
; -
maven.compiler.release
:表示使用的JDK版本,例如21
; -
maven.compiler.source
:表示Java編譯器讀取的原始碼版本; -
maven.compiler.target
:表示Java編譯器編譯的Class版本。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>17</maven.compiler.release>
</properties>
值得注意的是
從Java 9開始,推薦使用maven.compiler.release
屬性,保證編譯時輸入的原始碼和編譯輸出版本一致。如果原始碼和輸出版本不同,則應該分別設定maven.compiler.source
和maven.compiler.target
。
透過<properties>
定義的屬性,就可以固定JDK版本,防止同一個專案的不同的開發者各自使用不同版本的JDK。
<dependencies..>
這裡面就是整個專案所需的依賴
-
定義專案的依賴項,每個依賴項用
<dependency>
標籤表示。<dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>2.0.16</version> </dependency> </dependencies>
-
關鍵字元素:
-
<groupId>
:依賴的組 ID。 -
<artifactId>
:依賴的 artifact ID。 -
<version>
:依賴的版本號。
-
我們在引用其他第三方庫的時候,只需要透過這3個變數確定。例如,依賴org.slfj4:slf4j-simple:2.0.16
:這個依賴是我們可以直接線上下載下來直接呼叫的,解析下來就是
groupId
為 org.slfj4
artifactId
為slf4j-simple
version
為 2.0.16
一般我們在表示Maven依賴時,使用簡寫形式groupId:artifactId:version
這個時候回去看pom.xml
我們就發現整個結構已經非常清晰了,就是各種配置的結合體
xml
既然提到了,那我們就順便介紹一遍xml這個格式吧,透過上面的例子我們能看出xml是非常像html的語法的,但是xml有著很高的自由度,因為xml的本意就是靠著這樣的層級資訊去表達主題各式各樣的資訊
這樣的表示優點就是非常的結構化,結構化對於整個計算機的資訊表示無疑是非常契合和高效的
xml的表示既非常地公式化,使用<>
來將這個盒子命名就行,裡面隨便輸入資訊就行,因為xml的功能就像文章一樣,只是用來看的。也非常的靈活,每個<>
都可以進行巢狀