Maven的頂級功能——依賴管理

Be_Somebody發表於2024-11-07

依賴管理

依賴管理解決的問題

我們學完一個語言的語法之後,我們應該都能知道函式的引用或者類的建立等了。為了方便管理,我們就會把一些特定的功能實現寫在一個程式碼檔案中,我們只需要使用的時候匯入就行了,這樣無論是修改還是閱讀都更加的方便簡潔,但這樣會出來一個問題,一旦我們多個檔案你引用我,我引用你,就會出現蜈蚣一般的巢狀(比如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的功能就像文章一樣,只是用來看的。也非常的靈活,每個<>​都可以進行巢狀

相關文章