基于Maven pom文件使用分析
project
Maven 是一個強大的構(gòu)建和依賴管理工具,pom.xml 文件是 Maven 項目的核心配置文件,用于定義項目的構(gòu)建、依賴關(guān)系、插件、目標等。它是 Maven 構(gòu)建過程的基礎,所有的構(gòu)建配置都需要在該文件中進行定義。
project元素代表整個Maven項目,是POM文件中最外層的元素。
一個完整的 pom.xml 文件大致包括以下幾個部分:
- 項目基礎信息
- 組織與許可信息
- 自定義屬性信息
- 模塊配置
- 項目依賴配置
- Maven依賴倉庫信息
- Maven插件倉庫信息
- 構(gòu)建配置
- 版本控制信息
- 分發(fā)信息
- 報告配置
- 環(huán)境配置
子元素分類
項目基礎信息
元素名稱 | 描述 |
---|---|
parent | 指定父POM文件的坐標,繼承父項目的配置 |
modelVersion | POM模型的版本,通常為4.0.0 |
groupId | 唯一標識項目的組織或公司名稱 |
artifactId | 唯一標識項目的模塊名 |
name | 項目的名稱 |
version | 項目的版本號 |
packaging | 項目的打包類型,如jar、war、pom等 |
description | 項目的簡短描述 |
url | 項目主頁的URL地址 |
inceptionYear | 項目開始年份 |
- parent
parent元素用于定義當前項目的父項目信息,即當前項目所在的模塊繼承自哪個模塊。可被繼承的信息包括但不限于:dependencies、plugins、build、reporting等。常用于項目中許多模塊都存在共性配置的情況。
通過parent元素從父級POM文件繼承屬性,可以使子模塊重用父級組件中定義的配置和元素等,同時方便子模塊修改和覆蓋繼承的內(nèi)容。
- 一個完整的parent元素應該至少包含兩個必需的子元素:groupId和artifactId,分別表示父項目的groupId和artifactId。
- 另外,還可以使用version元素指定父項目的版本號。如果省略了版本,則Maven會自動搜索本地倉庫和遠程倉庫以查找最新版本。
Maven先查找本地倉庫,然后去中央倉庫下載指定的父級artifactId和groupId的POM文件,通過繼承父POM文件,可以避免在子模塊中重復定義相同的屬性。
屬性:
- groupId:父項目的GroupId。
- artifactId:父項目的ArtifactId。
- version:定義繼承自父級的版本號。
- relativePath:為確定父級POM的位置提供一個可選的相對路徑。當該元素未定義時,默認從本地倉庫和Maven中央倉庫搜索。
繼承父級的限制:
- 發(fā)布你自己的項目時,使用繼承層次結(jié)構(gòu)作為中心庫不是一個好的設計選擇。盡管這樣做會更方便,但它強制了許多限制。
- 如果依賴于某個庫,并且發(fā)現(xiàn)該庫沒有定義你需要的一些配置信息,那么你可以通過獨立定義一個父級(調(diào)整相應的部分)點解決問題。
- 如果某個庫的父級中的管理版本并不符合最新標準,而你又無法通知該項目的作者更新其父級,在這種情況下,你也可以獨立地定義一個POM文件并繼承自期望的目標。
示例:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.3</version> <relativePath/> </parent>
- modelVersion
modelVersion元素指定當前POM文件的版本號,用于標識當前POM使用的Maven模型版本。如果該元素未被顯式定義,并且當前POM文件是基于4.0.0或更高版本創(chuàng)建的,那么它將默認采用4.0.0版本。
modelVersion只能使用Maven支持的版本號。一旦確定了版本號,就應該始終使用相同的版本號,除非你有很好的理由來升級它。另外,如果你想要向后兼容其他版本的POM文件,可以保留舊版本并添加新屬性,而不是更新現(xiàn)有元素。
示例:
<modelVersion>4.0.0</modelVersion>
- groupId
groupId 元素定義了該項目所屬組織或公司的唯一標識符。它是 Maven 項目的全局唯一 ID,用于在倉庫中標識項目和依賴項。
通常情況下,groupId 建議以組織或公司的域名倒置為前綴,這樣做可避免命名空間沖突。
- groupId 的值不應包含空格或其他特殊字符,建議使用小寫字母和連字符作為單詞之間的分隔符。
- groupId 元素應當在 POM 文件中顯式指定,并且一旦指定,在整個項目中不應發(fā)生更改,否則可能會引起各種不同的問題。
- maven 對于 groupId 是區(qū)分大小寫的。因此,在同一個項目的不同模塊中,如果將 groupId 寫成了不同的大小寫形式,可能會導致依賴模塊的構(gòu)建失敗。因此,建議在整個項目中保持 groupId 的一致性。
示例:
<groupId>org.xxok.boot</groupId>
- artifactId
artifactId 元素是指當前Maven項目的唯一標識符,用于表示當前構(gòu)建的項目。
artifactId 元素同樣可以讓其他依賴引用到它作為依賴的項目POM文件中。
假如項目B需要依賴A項目的jar包,則需要配置A項目的坐標(groupId、artifactId、version),Maven 就會檢索并下載 A 項目的 jar 包來滿足 B 項目的依賴關(guān)系。
示例:
<artifactId>my-project</artifactId>
- name
name元素定義項目名稱。該元素是一個可選項,但強烈建議在每個POM中都使用它來描述當前項目,以便更容易地理解和識別項目的作用。在Maven生命周期、插件等其他各個地方,也會經(jīng)常使用到該屬性。
需要注意的是,在IDE或其他Maven工具中使用時,name元素可以幫助用戶識別并區(qū)分不同的模塊,以及幫助用戶快速找到文檔或其他相關(guān)信息。
示例:
<name>My App Name</name>
- version
version元素表示當前項目的版本號,它用于唯一標識項目和管理依賴項。
在Maven中,通常存在三種類型的版本號:
- SNAPSHOT:開發(fā)版本,表示還處于開發(fā)過程中,會隨著開發(fā)的進行不斷更新;
- RELEASE:穩(wěn)定版本,表示已經(jīng)完成開發(fā)工作,可以正式發(fā)布使用;
- 其他自定義版本號:根據(jù)具體需要自行指定。
version元素可以定義在以下幾個位置:
- 外部父POM文件中的version元素:如果您正在使用一個外部的父POM來管理項目,那么版本號可以從那里定義。
- 項目自身的version元素:如果您沒有使用一個外部的父POM,那么您可以在項目自身的pom.xml文件中定義版本號。
- 依賴項中的version元素:在項目的依賴項中也可以指定版本號。優(yōu)先級最高的是直接在依賴項中指定的版本號,其次是繼承自父POM文件、再次是項目自身定義的版本號。
示例:
<version>1.0-SNAPSHOT</version>
- packaging
packaging元素指定了項目打包的類型。
packaging的可選值:
- jar:以JAR形式打包,默認值
- war:以Web應用程序形式打包
- ear:以Enterprise應用程序形式打包
- pom:僅作為依賴項存在,不生成輸出文件
Maven將按照packaging元素指定的類型對項目進行打包,并將輸出內(nèi)容保存到目標目錄中(默認為target目錄)。
- description
description元素用于描述該項目的簡短說明。description元素并不影響項目的構(gòu)建和部署過程,只是作為一個文本描述的附加信息存在。
通常情況下,description元素緊隨groupId、artifactId和version元素之后,位于pom.xml文件的頂部。
示例:
<description>This project description</description>
- url
url元素用于指定項目的URL地址。 該元素通常用于指定項目主頁、文檔位置或者源代碼倉庫的地址等。
示例:
<url>https://github.com/username/projectname</url>
- inceptionYear
inceptionYear元素代表了項目的創(chuàng)建年份。
示例:
<inceptionYear>2010</inceptionYear>
組織與許可信息
元素名稱 | 描述 |
---|---|
organization | 項目的組織信息,如公司或開發(fā)者團隊 |
licenses | 項目所使用的開源許可證信息 |
developers | 項目開發(fā)人員的列表 |
contributors | 提供貢獻但未參與開發(fā)的人員列表 |
mailingLists | 項目的郵件討論列表 |
- organization
organization元素代表了項目所屬的組織信息。
這個元素是可選的,主要用作標識項目所屬機構(gòu)的相關(guān)信息,例如組織名稱、組織URL等。如果指定了organization元素,Maven會使用該信息生成默認的開發(fā)者和組織元素。
示例:
<organization> <name>ACME Corporation</name> <url>http://www.acme.com</url> </organization>
- licenses
licenses元素用于指定項目相關(guān)的許可證信息。
該元素通常包含多個license元素,每個license元素對應一個許可證信息。
示例:
<licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> </license> ... </licenses>
- developers
developers元素用于列出項目的開發(fā)者和其聯(lián)系方式。
通常情況下,developers元素緊隨description元素之后,位于pom.xml文件的頂部。developers元素提供的信息不會直接影響項目的構(gòu)建和部署過程,只是作為一個文本描述的附加信息存在。
示例:
<developers> <developer> <id>john_doe</id> <name>John Doe</name> <email>john.doe@example.com</email> </developer> <developer> <id>jane_doe</id> <name>Jane Doe</name> <email>jane.doe@example.com</email> </developer> </developers>
- contributors
contributors元素可以用來列舉該項目的貢獻者列表。元素可以包含多個contributor元素。
每個contributor元素應該至少包含name元素用于指定貢獻者的姓名或昵稱,可選地,還可以包含email、url和organization等子元素以提供更詳細的貢獻者信息。
示例:
<contributors> <contributor> <name>John Doe</name> <email>johndoe@example.com</email> <url>http://example.com</url> <organization>Acme Organization</organization> <organizationUrl>http://acme.org</organizationUrl> </contributor> <contributor> <name>Jane Smith</name> </contributor> </contributors>
- mailingLists
mailingLists元素用于指定項目相關(guān)的郵件列表信息。該元素通常包含多個mailingList元素,每個mailingList元素對應一個郵件列表信息。
通常情況下,mailingLists元素緊隨developers元素之后,位于pom.xml文件的頂部。mailingLists元素提供的信息不會直接影響項目的構(gòu)建和部署過程,只是作為一個文本描述的附加信息存在。
示例:
<mailingLists> <mailingList> <name>Developers List</name> <subscribe>dev-subscribe@example.com</subscribe> <unsubscribe>dev-unsubscribe@example.com</unsubscribe> <post>dev-post@example.com</post> <archive>http://example.com/mailman/private/dev-list/</archive> </mailingList> </mailingLists>
自定義屬性信息
元素名稱 | 描述 |
---|---|
properties | 定義項目使用的自定義屬性,供整個項目使用 |
- properties
properties元素用于定義一些可以在該POM及其子項目中重復引用的常量值。該元素通常包含各種 key-value對,其中key代表屬性的名稱,value代表屬性所表示的常量值。
需要注意的是,properties元素的定義僅僅是對屬性進行了聲明或賦值,并沒有定義這些屬性具體用于什么目的。確切的屬性用途,要依據(jù)實際情況而定。
示例:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
除此之外,Maven還有很多內(nèi)置的屬性。
Maven內(nèi)置屬性:
屬性名 | 描述 |
---|---|
${project.version} | 當前項目的版本號 |
${project.groupId} | 當前項目的組 ID |
${project.artifactId} | 當前項目的 artifactId |
${project.name} | 當前項目的名稱 |
${project.description} | 當前項目的描述 |
${project.url} | 當前項目的網(wǎng)址(主頁) |
${project.build.directory} | 構(gòu)建輸出目錄,默認是 target |
${project.build.outputDirectory} | 編譯后的 .class 文件輸出目錄 |
${project.build.finalName} | 構(gòu)建后生成的最終文件名(通常是 <artifactId>-<version>) |
${project.build.sourceDirectory} | 源代碼目錄,默認是 src/main/java |
${project.build.testSourceDirectory} | 測試代碼目錄,默認是 src/test/java |
${maven.version} | 當前使用的 Maven 版本號 |
${maven.home} | Maven 的安裝目錄 |
${basedir} | 項目的根目錄路徑,通常與 pom.xml 文件所在目錄相同 |
${user.home} | 當前用戶的主目錄路徑 |
${env.<variable>} | 獲取系統(tǒng)環(huán)境變量的值,例如 ${env.PATH} 獲取 PATH 環(huán)境變量 |
${project.build.plugins} | 當前項目的構(gòu)建插件 |
${project.build.pluginManagement} | 項目中插件管理部分 |
${session} | 當前 Maven 構(gòu)建會話對象 |
${settings.localRepository} | 本地 Maven 倉庫的路徑 |
${settings.userSettingsFile} | 用戶的 Maven 配置文件路徑(~/.m2/settings.xml) |
${settings.globalSettingsFile} | 全局 Maven 配置文件路徑 |
${project.basedir} | 項目的根目錄路徑 |
${project.compileSourceRoots} | 編譯源文件的根目錄列表 |
${project.testCompileSourceRoots} | 測試源文件的根目錄列表 |
${project.testOutputDirectory} | 測試編譯輸出目錄 |
${project.reporting.outputDirectory} | 項目報告輸出目錄(默認 target/site) |
${build.timestamp} | 構(gòu)建時間戳,表示構(gòu)建時間(如 yyyyMMdd-HHmm 格式) |
${project.reporting.pluginGroups} | 報告插件的組 ID |
${project.build.extensions} | 項目的構(gòu)建擴展 |
${project.distModule} | 項目的分發(fā)模塊信息 |
${project.testPlugin} | 項目的測試插件信息 |
${project.version} | 當前項目的版本號 |
${project.artifactId} | 當前項目的 artifactId |
${project.parent.version} | 父項目的版本號(如果存在父項目的話) |
${project.parent.groupId} | 父項目的 Group ID |
${project.parent.artifactId} | 父項目的 Artifact ID |
${project.parent.relativePath} | 父項目的 pom.xml 相對路徑 |
模塊配置
元素名稱 | 描述 |
---|---|
modules | 列出項目包含的子模塊列表 |
- modules
modules元素用于指定一個多模塊項目的子模塊列表??梢园鄠€module元素。
每個module元素應該只包含一個子元素:一個目錄名或相對路徑(默認相對于父項目的pom.xml文件)。當使用mvn命令執(zhí)行某個多模塊項目時,Maven會根據(jù)modules元素列出的子模塊進行構(gòu)建。
示例:
<modules> <module>module-a</module> <module>module-b</module> <module>module-c</module> </modules>
項目依賴配置
元素名稱 | 描述 |
---|---|
dependencyManagement | 統(tǒng)一管理項目依賴版本,避免版本沖突 |
dependencies | 項目運行所需的外部依賴庫 |
- dependencyManagement
dependencyManagement元素提供了一種集中式管理依賴項版本號的機制。該元素包含各種子元素,用于指定項目使用的各種依賴項及其版本。
示例:
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> <!-- ... --> </dependencies> </dependencyManagement>
需要注意的是,dependencyManagement元素中的依賴項聲明并沒有直接使用在項目中,他只是定義了版本和相關(guān)配置信息,以供項目的其他模塊繼承使用。
- dependencies
dependencies元素用于列出項目所依賴的外部庫,也就是所謂的“依賴項”。該元素可以包含多個dependency元素。
dependency元素:
- 一個完整的dependency元素應該至少包括groupId、artifactId和version三個必需的子元素。
- 當使用Maven構(gòu)建項目時,它會根據(jù)這些元素自動從倉庫下載對應的依賴包到本地存儲庫中。
dependency的子元素:
- groupId:依賴項所屬的組織或公司的唯一標識符。
- artifactId:依賴項的名稱,通常由項目名和模塊名組成。
- version:依賴項的版本號。
- scope:依賴項的作用范圍,可選值包括compile、provided、runtime、test等。
- type:依賴項的類型,默認為jar。
- classifier:用于區(qū)分同一artifactId和version下不同的構(gòu)建版本。
- optional:指定是否將該依賴項傳遞給項目的依賴項。
- exclusions:用于排除掉某個依賴項的傳遞依賴項。
示例:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.2.9.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> </dependencies>
Maven依賴倉庫信息
元素名稱 | 描述 |
---|---|
repositories | 定義項目依賴的Maven倉庫 |
- repositories
repositories元素用于定義該項目依賴庫(dependency)從哪里下載,以及下載順序。該元素主要包含了一組子元素,用于指定各種資源庫。該元素可以包含多個repository元素。
repository元素:
repository元素用于指定Maven項目的遠程倉庫信息。repository元素應該至少包含一個id、name和url子元素。
- id:倉庫ID,用于唯一標識該倉庫。
- name:倉庫名稱,用于描述該倉庫。
- url:倉庫URL,指向存儲依賴項的遠程倉庫地址。
多數(shù)情況下,Maven會自動下載所需的依賴項,因為它能夠從本地倉庫中找到這些依賴項。當然,如果某個依賴項需要從遠程倉庫下載,那么就需要先配置好這些倉庫。
示例:
<repositories> <repository> <id>central</id> <url>https://repo1.maven.org/maven2/</url> </repository> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>https://repository.jboss.org/nexus/content/groups/public/</url> </repository> <repository> <id>snapshots</id> <name>Maven Snapshots</name> <url>https://oss.sonatype.org/content/repositories/snapshots/</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
使用maven中央倉庫作為主要軟件庫,并添加了其他兩個外部倉庫
- 第一個repository元素指定了默認的中央倉庫。
- 第二個repository元素是一個JBoss庫,它只有元數(shù)據(jù)(pom),將無法下載包。
- 第三個repository元素是一個Sonatype的快照庫,其中配置了禁用發(fā)布版本和啟用快照版本支持。
需要注意的是,不必在每個pom.xml文件中都重新定義庫。實際上你可以在Maven settings.xml文件中定義多個公共庫(central、jcenter等), 項目會繼承這些已定義的庫。
Maven插件倉庫信息
元素名稱 | 描述 |
---|---|
pluginRepositories | 定義Maven插件的倉庫 |
- pluginRepositories
pluginRepositories元素用于定義該項目使用到的插件庫(plugins)從哪里下載以及下載順序。
和repositories元素非常相似,pluginRepositories主要包含了一組子元素,用于指定各種插件資源庫。該元素可以包含多個pluginRepository元素。
pluginRepository元素:
pluginRepository元素與repository 元素中的功能類似,pluginRepository 元素用于指定Maven插件庫的位置。pluginRepository 元素可以包含以下子元素:
- id: 插件倉庫ID,用于唯一標識該倉庫。
- name: 插件倉庫名稱,用于描述該倉庫。
- url: 插件倉庫URL,指向存儲插件的遠程倉庫地址。
示例:
<pluginRepositories> <pluginRepository> <id>central</id> <url>https://repo1.maven.org/maven2/</url> </pluginRepository> <pluginRepository> <id>jboss</id> <name>JBoss Repository</name> <url>https://repository.jboss.org/nexus/content/groups/public/</url> </pluginRepository> <pluginRepository> <id>snapshots</id> <name>Maven Snapshots</name> <url>https://oss.sonatype.org/content/repositories/snapshots/</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories>
使用maven中央倉庫作為主要插件庫,并添加了外部插件庫
- 第一個pluginRepository元素指定了默認的中央倉庫。
- 第二個pluginRepository元素是一個JBoss庫,它只有元數(shù)據(jù)(pom),將無法下載包。
- 第三個pluginRepository元素是一個Sonatype的快照庫,其中配置了禁用發(fā)布版本和啟用快照版本支持。
需要注意的是,同樣地,不必在每個pom.xml文件中都需要重新定義插件庫。你可以在Maven settings.xml文件中定義多個公共庫(central、jcenter等), 項目會繼承這些已定義的庫。
構(gòu)建配置
元素名稱 | 描述 |
---|---|
build | 定義項目的構(gòu)建過程,包括插件和生命周期 |
- build
build元素用于配置一個項目的構(gòu)建選項,主要包括了項目所依賴的插件、資源文件等構(gòu)建相關(guān)信息??梢园鄠€子元素,如plugins、resources等。
元素 | 描述 | 默認值 |
---|---|---|
sourceDirectory | 指定 Java 源代碼的目錄。 | src/main/java |
scriptSourceDirectory | 指定腳本文件(如 Groovy)源代碼的目錄。 | |
testSourceDirectory | 指定測試源代碼的目錄。 | src/test/java |
outputDirectory | 指定編譯后的 .class 文件的輸出目錄。 | target/classes |
testOutputDirectory | 指定測試編譯后的 .class 文件的輸出目錄。 | target/test-classes |
finalName | 指定最終構(gòu)建文件的名稱(不帶擴展名)。 | ${project.artifactId}-${project.version} |
resources | 指定資源文件目錄,資源文件會被復制到構(gòu)建輸出目錄。 | |
plugins | 配置構(gòu)建插件,用于處理具體的構(gòu)建任務。 | |
pluginManagement | 集中管理插件的版本和配置。插件配置在此元素下不會直接生效,需在 plugins 元素中引用。 | |
extensions | 指定 Maven 構(gòu)建過程中的擴展(如插件擴展)。 | |
pluginRepositories | 指定插件倉庫的位置。 | |
directory | 為 Maven 指定其他目錄,如編譯文件夾、測試文件夾等。 |
plugins:插件相關(guān)配置,指定插件及插件內(nèi)容,例如:
- plugin:指定具體插件名稱。
- groupId:插件所在組 ID
- artifactId:插件 ID
- version:插件版本號
- executions:插件執(zhí)行的配置,定義插件的生命周期綁定。
- configuration:指定插件的具體參數(shù)和設置。
- plugin:指定具體插件名稱。
resources:用于指定項目中使用的資源文件,通常包括屬性文件、XML 配置文件和 Spring 配置文件等。
- resource:表示項目主要的資源路徑。
- directory:資源文件所在的目錄路徑。
- includes:包含的資源文件路徑模式,支持通配符。
- excludes:排除的資源文件路徑模式,支持通配符。
- filtering:是否對資源文件進行過濾(如替換 ${} 占位符)。默認為 false。
- targetPath:指定資源文件在構(gòu)建輸出目錄中的目標路徑。
- encoding:資源文件的編碼方式。默認為平臺相關(guān)編碼。
- items:指定一個或多個資源項,進一步定義資源文件的行為。
- nonFiltered:指定不進行過濾的資源文件路徑模式。
- resource:表示項目主要的資源路徑。
示例:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> </build>
- 定義了兩個插件:maven-compiler-plugin和spring-boot-maven-plugin,并配置了maven-compiler-plugin的源代碼和目標代碼版本為1.8。
- 指定了使用src/main/resources目錄下的.properties和.xml文件作為項目資源文件。
版本控制信息
元素名稱 | 描述 |
---|---|
scm | 配置源代碼管理系統(tǒng)(如Git、SVN)的信息 |
- scm
scm元素用于定義一個項目的源代碼管理(SCM)信息,以便Maven可以從這個倉庫中檢索和構(gòu)建代碼。
一個完整的scm元素至少應該包括兩個必需的子元素:connection和developerConnection,它們分別表示開發(fā)者與版本控制庫之間的連接方式。另外,還可以使用url、tag、branch等其他子元素進一步指定SCM信息。
scm子元素:
- connection:源代碼倉庫的連接 URL,用于從 SCM 獲取元數(shù)據(jù)。
- developerConnection:開發(fā)者用來推送代碼的連接 URL,通常是私有的。
- url:公開的源代碼倉庫訪問 URL,通常用于查看源代碼。
- tag:源代碼倉庫中的標簽,標識一個特定的版本。
- branch:源代碼倉庫中的分支名稱,表示開發(fā)或發(fā)布的分支。
- commit:指定源代碼的某個特定提交(哈希值),確保構(gòu)建時使用正確的代碼。
- checkoutDirectory:源碼檢出的目錄路徑,默認是項目根目錄,指定了檢出源代碼的具體路徑。
SCM的用途:
- 通過指定源代碼的版本控制系統(tǒng)信息,使得其他開發(fā)者能夠更輕松地將項目檢出到本地環(huán)境中,并參與項目的開發(fā)。
- 在項目構(gòu)建期間,Maven可以利用SCM配置來自動從版本控制系統(tǒng)中獲取源代碼,并構(gòu)建項目。
- 通過指定版本控制系統(tǒng)的分支或標簽信息,Maven可以構(gòu)建特定版本的項目,從而方便項目的發(fā)布和部署。
- SCM配置還可以用于指定版本控制系統(tǒng)的URL,以便Maven可以自動地為項目生成構(gòu)建信息和版本號等元數(shù)據(jù),這些信息對于跟蹤和管理項目非常重要。
示例:
<scm> <connection>scm:git:git://github.com/user/repo.git</connection> <developerConnection>scm:git:ssh://github.com/user/repo.git</developerConnection> <url>https://github.com/user/repo/tree/master</url> <tag>1.0.0</tag> </scm>
上述代碼中,定義了一個基于Git的源代碼管理信息。
其中,connection元素通過https協(xié)議指定了與代碼庫的連接方式,而developerConnection元素則通過ssh協(xié)議進行連接。除此之外,還指定了代碼庫的URL(即主頁地址)以及打標簽時使用的默認tag。
分發(fā)信息
元素名稱 | 描述 |
---|---|
distributionManagement | 配置項目的分發(fā)方式,如發(fā)布到Maven倉庫或其他服務 |
- distributionManagement
- distributionManagement元素用于管理您構(gòu)建后部署(或發(fā)布)到哪里。該元素中包含了各種子元素,用于指定項目的發(fā)行版本部署(或發(fā)布)相關(guān)配置。
- distributionManagement元素只是用于管理項目的分發(fā)版本部署(或發(fā)布)的相關(guān)配置,而不會影響項目的編譯和構(gòu)建過程。
示例:
<distributionManagement> <repository> <id>internal.repo</id> <name>Internal Repository</name> <url>file:///usr/local/repo</url> </repository> </distributionManagement>
在上面的示例中,我們聲明了一個名為"Internal Repository"的倉庫,其地址為本地文件系統(tǒng)上的/usr/local/repo目錄。
一旦定義了這個倉庫之后,可以使用命令 mvn deploy 將此存儲庫作為項目的部署目標,在構(gòu)建過程中上傳并部署項目至該存儲庫。
報告配置
元素名稱 | 描述 |
---|---|
reporting | 配置如何生成項目報告,如代碼質(zhì)量報告、測試報告等 |
- reporting
reporting元素用于為項目生成一些報告,例如代碼覆蓋率、靜態(tài)代碼分析結(jié)果等。該元素可以包含各種子元素,來配置需要生成哪些報告,以及如何生成這些報告。
reporting元素只是用于配置Maven生成報告的相關(guān)信息,它不影響項目的編譯和構(gòu)建過程,并且生成的報告通常是基于已經(jīng)構(gòu)建好的代碼來進行分析處理的。
示例:
<reporting> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.6</version> </plugin> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.9.0.2155</version> </plugin> <!-- ... --> </plugins> </reporting>
在上面的示例中,我們定義了兩個插件,分別是Jacoco和SonarQube。通過使用這些插件,Maven可以生成有關(guān)代碼覆蓋率、靜態(tài)代碼分析的報告。其他可供選擇的報告插件包括FindBugs、Checkstyle、Javadoc等。
環(huán)境配置
元素名稱 | 描述 |
---|---|
profiles | 定義不同構(gòu)建環(huán)境下的配置文件,可根據(jù)需求啟用不同的構(gòu)建配置 |
- profiles
profiles元素用于定義一個或多個構(gòu)建“配置”(profile),這些配置與通常的構(gòu)建選項不同,能夠根據(jù)不同的環(huán)境、需求等情況進行靈活地管理不同構(gòu)建環(huán)境下的項目配置和依賴項。
profile
一個profile元素可以包含多個子元素,如id、activation、properties、dependencies等,每個子元素又可以包含具體的配置信息。
- id(名稱):必需,用于給對應的構(gòu)建配置指定一個名稱。
- activation(激活條件):用于指定觸發(fā)profile的條件,如:系統(tǒng)屬性、JDK版本、Maven版本、操作系統(tǒng)等。
- properties(屬性):定義profile中使用的屬性值。這些屬性可以被其他元素引用,以便在不同的環(huán)境下使用不同的值。
- dependencies(依賴):指定與profile相關(guān)的依賴項。這些依賴項僅在激活profile時才會被添加到項目中。
- dependencyManagement(依賴管理):類似于dependencies,但是它只定義依賴版本號,而不引入實際依賴。
- build(構(gòu)建):用于定義與profile相關(guān)的構(gòu)建設置,例如編譯器版本、打包方式等。
- reporting(報告):指定生成報告時使用的插件和配置。
- modules(模塊):定義特定的modules,這些modules僅在激活profile時才會被構(gòu)建。
- repositories(倉庫):指定與profile相關(guān)的倉庫配置。
在POM文件中定義了Profile元素之后,可以根據(jù)所需的構(gòu)建環(huán)境激活或禁用它們。
要激活Profile元素,可以使用命令行選項、環(huán)境變量或其他Maven插件來指定所需的Profile。例如,使用“-P production”命令可以激活包含“production”Profile的POM文件。
示例:
<profiles> <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName> </properties> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> </dependencies> </profile> </profiles>
上述代碼中,定義了一個名為development的構(gòu)建配置,啟動該配置的條件為默認激活(activeByDefault)。該配置使用MySQL驅(qū)動程序作為依賴項,并設置了jdbc.driverClassName屬性值,以便在開發(fā)環(huán)境中使用正確的數(shù)據(jù)庫連接驅(qū)動。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisPlus多數(shù)據(jù)源及事務解決思路
這篇文章主要介紹了MybatisPlus多數(shù)據(jù)源及事務解決思路,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01Mybatis-Plus中的MetaObjectHandler組件的使用
MetaObjectHandler是Mybatis-Plus中一個實用組件,專門用于自動處理實體對象中的特定字段,如創(chuàng)建時間、更新時間、創(chuàng)建人和修改人等,該接口允許開發(fā)者在不修改業(yè)務代碼的情況下,實現(xiàn)自動填充功能,極大地簡化了代碼的復雜性,感興趣的可以了解一下2024-10-10Spring AbstractRoutingDatasource 動態(tài)數(shù)據(jù)源的實例講解
本文介紹如何使用 Spring AbstractRoutingDatasource 基于上下文動態(tài)切換數(shù)據(jù)源,因此我們會讓查找數(shù)據(jù)源邏輯獨立于數(shù)據(jù)訪問之外2021-07-07