亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于Maven pom文件使用分析

 更新時(shí)間:2024年12月13日 16:11:03   作者:騎個(gè)小蝸牛  
本文詳細(xì)介紹了Maven項(xiàng)目的核心配置文件pom.xml的結(jié)構(gòu)和各個(gè)元素的用途,包括項(xiàng)目基礎(chǔ)信息、依賴管理、倉庫配置、構(gòu)建配置、版本控制、分發(fā)和報(bào)告配置等,幫助讀者全面了解Maven項(xiàng)目的構(gòu)建和管理過程

project

Maven 是一個(gè)強(qiáng)大的構(gòu)建和依賴管理工具,pom.xml 文件是 Maven 項(xiàng)目的核心配置文件,用于定義項(xiàng)目的構(gòu)建、依賴關(guān)系、插件、目標(biāo)等。它是 Maven 構(gòu)建過程的基礎(chǔ),所有的構(gòu)建配置都需要在該文件中進(jìn)行定義。

project元素代表整個(gè)Maven項(xiàng)目,是POM文件中最外層的元素。

一個(gè)完整的 pom.xml 文件大致包括以下幾個(gè)部分:

  • 項(xiàng)目基礎(chǔ)信息
  • 組織與許可信息
  • 自定義屬性信息
  • 模塊配置
  • 項(xiàng)目依賴配置
  • Maven依賴倉庫信息
  • Maven插件倉庫信息
  • 構(gòu)建配置
  • 版本控制信息
  • 分發(fā)信息
  • 報(bào)告配置
  • 環(huán)境配置

子元素分類

項(xiàng)目基礎(chǔ)信息

元素名稱描述
parent指定父POM文件的坐標(biāo),繼承父項(xiàng)目的配置
modelVersionPOM模型的版本,通常為4.0.0
groupId唯一標(biāo)識(shí)項(xiàng)目的組織或公司名稱
artifactId唯一標(biāo)識(shí)項(xiàng)目的模塊名
name項(xiàng)目的名稱
version項(xiàng)目的版本號(hào)
packaging項(xiàng)目的打包類型,如jar、war、pom等
description項(xiàng)目的簡短描述
url項(xiàng)目主頁的URL地址
inceptionYear項(xiàng)目開始年份
- parent

parent元素用于定義當(dāng)前項(xiàng)目的父項(xiàng)目信息,即當(dāng)前項(xiàng)目所在的模塊繼承自哪個(gè)模塊??杀焕^承的信息包括但不限于:dependencies、plugins、build、reporting等。常用于項(xiàng)目中許多模塊都存在共性配置的情況。

通過parent元素從父級(jí)POM文件繼承屬性,可以使子模塊重用父級(jí)組件中定義的配置和元素等,同時(shí)方便子模塊修改和覆蓋繼承的內(nèi)容。

  • 一個(gè)完整的parent元素應(yīng)該至少包含兩個(gè)必需的子元素:groupId和artifactId,分別表示父項(xiàng)目的groupId和artifactId。
  • 另外,還可以使用version元素指定父項(xiàng)目的版本號(hào)。如果省略了版本,則Maven會(huì)自動(dòng)搜索本地倉庫和遠(yuǎn)程倉庫以查找最新版本。

Maven先查找本地倉庫,然后去中央倉庫下載指定的父級(jí)artifactId和groupId的POM文件,通過繼承父POM文件,可以避免在子模塊中重復(fù)定義相同的屬性。

屬性:

  • groupId:父項(xiàng)目的GroupId。
  • artifactId:父項(xiàng)目的ArtifactId。
  • version:定義繼承自父級(jí)的版本號(hào)。
  • relativePath:為確定父級(jí)POM的位置提供一個(gè)可選的相對(duì)路徑。當(dāng)該元素未定義時(shí),默認(rèn)從本地倉庫和Maven中央倉庫搜索。

繼承父級(jí)的限制:

  • 發(fā)布你自己的項(xiàng)目時(shí),使用繼承層次結(jié)構(gòu)作為中心庫不是一個(gè)好的設(shè)計(jì)選擇。盡管這樣做會(huì)更方便,但它強(qiáng)制了許多限制。
  • 如果依賴于某個(gè)庫,并且發(fā)現(xiàn)該庫沒有定義你需要的一些配置信息,那么你可以通過獨(dú)立定義一個(gè)父級(jí)(調(diào)整相應(yīng)的部分)點(diǎn)解決問題。
  • 如果某個(gè)庫的父級(jí)中的管理版本并不符合最新標(biāo)準(zhǔn),而你又無法通知該項(xiàng)目的作者更新其父級(jí),在這種情況下,你也可以獨(dú)立地定義一個(gè)POM文件并繼承自期望的目標(biāo)。

示例:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.3</version>
    <relativePath/>
</parent>
- modelVersion

modelVersion元素指定當(dāng)前POM文件的版本號(hào),用于標(biāo)識(shí)當(dāng)前POM使用的Maven模型版本。如果該元素未被顯式定義,并且當(dāng)前POM文件是基于4.0.0或更高版本創(chuàng)建的,那么它將默認(rèn)采用4.0.0版本。

modelVersion只能使用Maven支持的版本號(hào)。一旦確定了版本號(hào),就應(yīng)該始終使用相同的版本號(hào),除非你有很好的理由來升級(jí)它。另外,如果你想要向后兼容其他版本的POM文件,可以保留舊版本并添加新屬性,而不是更新現(xiàn)有元素。

示例:

<modelVersion>4.0.0</modelVersion>
- groupId

groupId 元素定義了該項(xiàng)目所屬組織或公司的唯一標(biāo)識(shí)符。它是 Maven 項(xiàng)目的全局唯一 ID,用于在倉庫中標(biāo)識(shí)項(xiàng)目和依賴項(xiàng)。

通常情況下,groupId 建議以組織或公司的域名倒置為前綴,這樣做可避免命名空間沖突。

  • groupId 的值不應(yīng)包含空格或其他特殊字符,建議使用小寫字母和連字符作為單詞之間的分隔符。
  • groupId 元素應(yīng)當(dāng)在 POM 文件中顯式指定,并且一旦指定,在整個(gè)項(xiàng)目中不應(yīng)發(fā)生更改,否則可能會(huì)引起各種不同的問題。
  • maven 對(duì)于 groupId 是區(qū)分大小寫的。因此,在同一個(gè)項(xiàng)目的不同模塊中,如果將 groupId 寫成了不同的大小寫形式,可能會(huì)導(dǎo)致依賴模塊的構(gòu)建失敗。因此,建議在整個(gè)項(xiàng)目中保持 groupId 的一致性。

示例:

<groupId>org.xxok.boot</groupId>
- artifactId

artifactId 元素是指當(dāng)前Maven項(xiàng)目的唯一標(biāo)識(shí)符,用于表示當(dāng)前構(gòu)建的項(xiàng)目。

artifactId 元素同樣可以讓其他依賴引用到它作為依賴的項(xiàng)目POM文件中。

假如項(xiàng)目B需要依賴A項(xiàng)目的jar包,則需要配置A項(xiàng)目的坐標(biāo)(groupId、artifactId、version),Maven 就會(huì)檢索并下載 A 項(xiàng)目的 jar 包來滿足 B 項(xiàng)目的依賴關(guān)系。

示例:

<artifactId>my-project</artifactId>
- name

name元素定義項(xiàng)目名稱。該元素是一個(gè)可選項(xiàng),但強(qiáng)烈建議在每個(gè)POM中都使用它來描述當(dāng)前項(xiàng)目,以便更容易地理解和識(shí)別項(xiàng)目的作用。在Maven生命周期、插件等其他各個(gè)地方,也會(huì)經(jīng)常使用到該屬性。

需要注意的是,在IDE或其他Maven工具中使用時(shí),name元素可以幫助用戶識(shí)別并區(qū)分不同的模塊,以及幫助用戶快速找到文檔或其他相關(guān)信息。

示例:

<name>My App Name</name>
- version

version元素表示當(dāng)前項(xiàng)目的版本號(hào),它用于唯一標(biāo)識(shí)項(xiàng)目和管理依賴項(xiàng)。

在Maven中,通常存在三種類型的版本號(hào):

  • SNAPSHOT:開發(fā)版本,表示還處于開發(fā)過程中,會(huì)隨著開發(fā)的進(jìn)行不斷更新;
  • RELEASE:穩(wěn)定版本,表示已經(jīng)完成開發(fā)工作,可以正式發(fā)布使用;
  • 其他自定義版本號(hào):根據(jù)具體需要自行指定。

version元素可以定義在以下幾個(gè)位置:

  • 外部父POM文件中的version元素:如果您正在使用一個(gè)外部的父POM來管理項(xiàng)目,那么版本號(hào)可以從那里定義。
  • 項(xiàng)目自身的version元素:如果您沒有使用一個(gè)外部的父POM,那么您可以在項(xiàng)目自身的pom.xml文件中定義版本號(hào)。
  • 依賴項(xiàng)中的version元素:在項(xiàng)目的依賴項(xiàng)中也可以指定版本號(hào)。優(yōu)先級(jí)最高的是直接在依賴項(xiàng)中指定的版本號(hào),其次是繼承自父POM文件、再次是項(xiàng)目自身定義的版本號(hào)。

示例:

<version>1.0-SNAPSHOT</version>
- packaging

packaging元素指定了項(xiàng)目打包的類型。

packaging的可選值:

  • jar:以JAR形式打包,默認(rèn)值
  • war:以Web應(yīng)用程序形式打包
  • ear:以Enterprise應(yīng)用程序形式打包
  • pom:僅作為依賴項(xiàng)存在,不生成輸出文件

Maven將按照packaging元素指定的類型對(duì)項(xiàng)目進(jìn)行打包,并將輸出內(nèi)容保存到目標(biāo)目錄中(默認(rèn)為target目錄)。

- description

description元素用于描述該項(xiàng)目的簡短說明。description元素并不影響項(xiàng)目的構(gòu)建和部署過程,只是作為一個(gè)文本描述的附加信息存在。

通常情況下,description元素緊隨groupId、artifactId和version元素之后,位于pom.xml文件的頂部。

示例:

<description>This project description</description>
- url

url元素用于指定項(xiàng)目的URL地址。 該元素通常用于指定項(xiàng)目主頁、文檔位置或者源代碼倉庫的地址等。

示例:

<url>https://github.com/username/projectname</url>
- inceptionYear

inceptionYear元素代表了項(xiàng)目的創(chuàng)建年份。

示例:

<inceptionYear>2010</inceptionYear>

組織與許可信息

元素名稱描述
organization項(xiàng)目的組織信息,如公司或開發(fā)者團(tuán)隊(duì)
licenses項(xiàng)目所使用的開源許可證信息
developers項(xiàng)目開發(fā)人員的列表
contributors提供貢獻(xiàn)但未參與開發(fā)的人員列表
mailingLists項(xiàng)目的郵件討論列表
- organization

organization元素代表了項(xiàng)目所屬的組織信息。

這個(gè)元素是可選的,主要用作標(biāo)識(shí)項(xiàng)目所屬機(jī)構(gòu)的相關(guān)信息,例如組織名稱、組織URL等。如果指定了organization元素,Maven會(huì)使用該信息生成默認(rèn)的開發(fā)者和組織元素。

示例:

<organization>
    <name>ACME Corporation</name>
    <url>http://www.acme.com</url>
</organization>
- licenses

licenses元素用于指定項(xiàng)目相關(guān)的許可證信息。

該元素通常包含多個(gè)license元素,每個(gè)license元素對(duì)應(yīng)一個(gè)許可證信息。

示例:

<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元素用于列出項(xiàng)目的開發(fā)者和其聯(lián)系方式。

通常情況下,developers元素緊隨description元素之后,位于pom.xml文件的頂部。developers元素提供的信息不會(huì)直接影響項(xiàng)目的構(gòu)建和部署過程,只是作為一個(gè)文本描述的附加信息存在。

示例:

<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元素可以用來列舉該項(xiàng)目的貢獻(xiàn)者列表。元素可以包含多個(gè)contributor元素。

每個(gè)contributor元素應(yīng)該至少包含name元素用于指定貢獻(xiàn)者的姓名或昵稱,可選地,還可以包含email、url和organization等子元素以提供更詳細(xì)的貢獻(xiàn)者信息。

示例:

<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元素用于指定項(xiàng)目相關(guān)的郵件列表信息。該元素通常包含多個(gè)mailingList元素,每個(gè)mailingList元素對(duì)應(yīng)一個(gè)郵件列表信息。

通常情況下,mailingLists元素緊隨developers元素之后,位于pom.xml文件的頂部。mailingLists元素提供的信息不會(huì)直接影響項(xiàng)目的構(gòu)建和部署過程,只是作為一個(gè)文本描述的附加信息存在。

示例:

<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定義項(xiàng)目使用的自定義屬性,供整個(gè)項(xiàng)目使用
- properties

properties元素用于定義一些可以在該P(yáng)OM及其子項(xiàng)目中重復(fù)引用的常量值。該元素通常包含各種 key-value對(duì),其中key代表屬性的名稱,value代表屬性所表示的常量值。

需要注意的是,properties元素的定義僅僅是對(duì)屬性進(jìn)行了聲明或賦值,并沒有定義這些屬性具體用于什么目的。確切的屬性用途,要依據(jù)實(shí)際情況而定。

示例:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

除此之外,Maven還有很多內(nèi)置的屬性。

Maven內(nèi)置屬性:

屬性名描述
${project.version}當(dāng)前項(xiàng)目的版本號(hào)
${project.groupId}當(dāng)前項(xiàng)目的組 ID
${project.artifactId}當(dāng)前項(xiàng)目的 artifactId
${project.name}當(dāng)前項(xiàng)目的名稱
${project.description}當(dāng)前項(xiàng)目的描述
${project.url}當(dāng)前項(xiàng)目的網(wǎng)址(主頁)
${project.build.directory}構(gòu)建輸出目錄,默認(rèn)是 target
${project.build.outputDirectory}編譯后的 .class 文件輸出目錄
${project.build.finalName}構(gòu)建后生成的最終文件名(通常是 <artifactId>-<version>)
${project.build.sourceDirectory}源代碼目錄,默認(rèn)是 src/main/java
${project.build.testSourceDirectory}測(cè)試代碼目錄,默認(rèn)是 src/test/java
${maven.version}當(dāng)前使用的 Maven 版本號(hào)
${maven.home}Maven 的安裝目錄
${basedir}項(xiàng)目的根目錄路徑,通常與 pom.xml 文件所在目錄相同
${user.home}當(dāng)前用戶的主目錄路徑
${env.<variable>}獲取系統(tǒng)環(huán)境變量的值,例如 ${env.PATH} 獲取 PATH 環(huán)境變量
${project.build.plugins}當(dāng)前項(xiàng)目的構(gòu)建插件
${project.build.pluginManagement}項(xiàng)目中插件管理部分
${session}當(dāng)前 Maven 構(gòu)建會(huì)話對(duì)象
${settings.localRepository}本地 Maven 倉庫的路徑
${settings.userSettingsFile}用戶的 Maven 配置文件路徑(~/.m2/settings.xml)
${settings.globalSettingsFile}全局 Maven 配置文件路徑
${project.basedir}項(xiàng)目的根目錄路徑
${project.compileSourceRoots}編譯源文件的根目錄列表
${project.testCompileSourceRoots}測(cè)試源文件的根目錄列表
${project.testOutputDirectory}測(cè)試編譯輸出目錄
${project.reporting.outputDirectory}項(xiàng)目報(bào)告輸出目錄(默認(rèn) target/site)
${build.timestamp}構(gòu)建時(shí)間戳,表示構(gòu)建時(shí)間(如 yyyyMMdd-HHmm 格式)
${project.reporting.pluginGroups}報(bào)告插件的組 ID
${project.build.extensions}項(xiàng)目的構(gòu)建擴(kuò)展
${project.distModule}項(xiàng)目的分發(fā)模塊信息
${project.testPlugin}項(xiàng)目的測(cè)試插件信息
${project.version}當(dāng)前項(xiàng)目的版本號(hào)
${project.artifactId}當(dāng)前項(xiàng)目的 artifactId
${project.parent.version}父項(xiàng)目的版本號(hào)(如果存在父項(xiàng)目的話)
${project.parent.groupId}父項(xiàng)目的 Group ID
${project.parent.artifactId}父項(xiàng)目的 Artifact ID
${project.parent.relativePath}父項(xiàng)目的 pom.xml 相對(duì)路徑

模塊配置

元素名稱描述
modules列出項(xiàng)目包含的子模塊列表
- modules

modules元素用于指定一個(gè)多模塊項(xiàng)目的子模塊列表??梢园鄠€(gè)module元素。

每個(gè)module元素應(yīng)該只包含一個(gè)子元素:一個(gè)目錄名或相對(duì)路徑(默認(rèn)相對(duì)于父項(xiàng)目的pom.xml文件)。當(dāng)使用mvn命令執(zhí)行某個(gè)多模塊項(xiàng)目時(shí),Maven會(huì)根據(jù)modules元素列出的子模塊進(jìn)行構(gòu)建。

示例:

<modules>
    <module>module-a</module>
    <module>module-b</module>
    <module>module-c</module>
  </modules>

項(xiàng)目依賴配置

元素名稱描述
dependencyManagement統(tǒng)一管理項(xiàng)目依賴版本,避免版本沖突
dependencies項(xiàng)目運(yùn)行所需的外部依賴庫
- dependencyManagement

dependencyManagement元素提供了一種集中式管理依賴項(xiàng)版本號(hào)的機(jī)制。該元素包含各種子元素,用于指定項(xiàng)目使用的各種依賴項(xiàng)及其版本。

示例:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.1</version>
      <scope>test</scope>
    </dependency>
    <!-- ... -->
  </dependencies>
</dependencyManagement>

需要注意的是,dependencyManagement元素中的依賴項(xiàng)聲明并沒有直接使用在項(xiàng)目中,他只是定義了版本和相關(guān)配置信息,以供項(xiàng)目的其他模塊繼承使用。

- dependencies

dependencies元素用于列出項(xiàng)目所依賴的外部庫,也就是所謂的“依賴項(xiàng)”。該元素可以包含多個(gè)dependency元素。

dependency元素:

  • 一個(gè)完整的dependency元素應(yīng)該至少包括groupId、artifactId和version三個(gè)必需的子元素。
  • 當(dāng)使用Maven構(gòu)建項(xiàng)目時(shí),它會(huì)根據(jù)這些元素自動(dòng)從倉庫下載對(duì)應(yīng)的依賴包到本地存儲(chǔ)庫中。

dependency的子元素:

  • groupId:依賴項(xiàng)所屬的組織或公司的唯一標(biāo)識(shí)符。
  • artifactId:依賴項(xiàng)的名稱,通常由項(xiàng)目名和模塊名組成。
  • version:依賴項(xiàng)的版本號(hào)。
  • scope:依賴項(xiàng)的作用范圍,可選值包括compile、provided、runtime、test等。
  • type:依賴項(xiàng)的類型,默認(rèn)為jar。
  • classifier:用于區(qū)分同一artifactId和version下不同的構(gòu)建版本。
  • optional:指定是否將該依賴項(xiàng)傳遞給項(xiàng)目的依賴項(xiàng)。
  • exclusions:用于排除掉某個(gè)依賴項(xiàng)的傳遞依賴項(xiàng)。

示例:

<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定義項(xiàng)目依賴的Maven倉庫
- repositories

repositories元素用于定義該項(xiàng)目依賴庫(dependency)從哪里下載,以及下載順序。該元素主要包含了一組子元素,用于指定各種資源庫。該元素可以包含多個(gè)repository元素。

repository元素:

repository元素用于指定Maven項(xiàng)目的遠(yuǎn)程倉庫信息。repository元素應(yīng)該至少包含一個(gè)id、name和url子元素。

  • id:倉庫ID,用于唯一標(biāo)識(shí)該倉庫。
  • name:倉庫名稱,用于描述該倉庫。
  • url:倉庫URL,指向存儲(chǔ)依賴項(xiàng)的遠(yuǎn)程倉庫地址。

多數(shù)情況下,Maven會(huì)自動(dòng)下載所需的依賴項(xiàng),因?yàn)樗軌驈谋镜貍}庫中找到這些依賴項(xiàng)。當(dāng)然,如果某個(gè)依賴項(xiàng)需要從遠(yuǎn)程倉庫下載,那么就需要先配置好這些倉庫。

示例:

<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中央倉庫作為主要軟件庫,并添加了其他兩個(gè)外部倉庫

  • 第一個(gè)repository元素指定了默認(rèn)的中央倉庫。
  • 第二個(gè)repository元素是一個(gè)JBoss庫,它只有元數(shù)據(jù)(pom),將無法下載包。
  • 第三個(gè)repository元素是一個(gè)Sonatype的快照庫,其中配置了禁用發(fā)布版本和啟用快照版本支持。

需要注意的是,不必在每個(gè)pom.xml文件中都重新定義庫。實(shí)際上你可以在Maven settings.xml文件中定義多個(gè)公共庫(central、jcenter等), 項(xiàng)目會(huì)繼承這些已定義的庫。

Maven插件倉庫信息

元素名稱描述
pluginRepositories定義Maven插件的倉庫
- pluginRepositories

pluginRepositories元素用于定義該項(xiàng)目使用到的插件庫(plugins)從哪里下載以及下載順序。

和repositories元素非常相似,pluginRepositories主要包含了一組子元素,用于指定各種插件資源庫。該元素可以包含多個(gè)pluginRepository元素。

pluginRepository元素:

pluginRepository元素與repository 元素中的功能類似,pluginRepository 元素用于指定Maven插件庫的位置。pluginRepository 元素可以包含以下子元素:

  • id: 插件倉庫ID,用于唯一標(biāo)識(shí)該倉庫。
  • name: 插件倉庫名稱,用于描述該倉庫。
  • url: 插件倉庫URL,指向存儲(chǔ)插件的遠(yuǎn)程倉庫地址。

示例:

<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中央倉庫作為主要插件庫,并添加了外部插件庫

  • 第一個(gè)pluginRepository元素指定了默認(rèn)的中央倉庫。
  • 第二個(gè)pluginRepository元素是一個(gè)JBoss庫,它只有元數(shù)據(jù)(pom),將無法下載包。
  • 第三個(gè)pluginRepository元素是一個(gè)Sonatype的快照庫,其中配置了禁用發(fā)布版本和啟用快照版本支持。

需要注意的是,同樣地,不必在每個(gè)pom.xml文件中都需要重新定義插件庫。你可以在Maven settings.xml文件中定義多個(gè)公共庫(central、jcenter等), 項(xiàng)目會(huì)繼承這些已定義的庫。

構(gòu)建配置

元素名稱描述
build定義項(xiàng)目的構(gòu)建過程,包括插件和生命周期
- build

build元素用于配置一個(gè)項(xiàng)目的構(gòu)建選項(xiàng),主要包括了項(xiàng)目所依賴的插件、資源文件等構(gòu)建相關(guān)信息??梢园鄠€(gè)子元素,如plugins、resources等。

元素描述默認(rèn)值
sourceDirectory指定 Java 源代碼的目錄。src/main/java
scriptSourceDirectory指定腳本文件(如 Groovy)源代碼的目錄。
testSourceDirectory指定測(cè)試源代碼的目錄。src/test/java
outputDirectory指定編譯后的 .class 文件的輸出目錄。target/classes
testOutputDirectory指定測(cè)試編譯后的 .class 文件的輸出目錄。target/test-classes
finalName指定最終構(gòu)建文件的名稱(不帶擴(kuò)展名)。${project.artifactId}-${project.version}
resources指定資源文件目錄,資源文件會(huì)被復(fù)制到構(gòu)建輸出目錄。
plugins配置構(gòu)建插件,用于處理具體的構(gòu)建任務(wù)。
pluginManagement集中管理插件的版本和配置。插件配置在此元素下不會(huì)直接生效,需在 plugins 元素中引用。
extensions指定 Maven 構(gòu)建過程中的擴(kuò)展(如插件擴(kuò)展)。
pluginRepositories指定插件倉庫的位置。
directory為 Maven 指定其他目錄,如編譯文件夾、測(cè)試文件夾等。
  • plugins:插件相關(guān)配置,指定插件及插件內(nèi)容,例如:

    • plugin:指定具體插件名稱。
      • groupId:插件所在組 ID
      • artifactId:插件 ID
      • version:插件版本號(hào)
      • executions:插件執(zhí)行的配置,定義插件的生命周期綁定。
      • configuration:指定插件的具體參數(shù)和設(shè)置。
  • resources:用于指定項(xiàng)目中使用的資源文件,通常包括屬性文件、XML 配置文件和 Spring 配置文件等。

    • resource:表示項(xiàng)目主要的資源路徑。
      • directory:資源文件所在的目錄路徑。
      • includes:包含的資源文件路徑模式,支持通配符。
      • excludes:排除的資源文件路徑模式,支持通配符。
      • filtering:是否對(duì)資源文件進(jìn)行過濾(如替換 ${} 占位符)。默認(rèn)為 false。
      • targetPath:指定資源文件在構(gòu)建輸出目錄中的目標(biāo)路徑。
      • encoding:資源文件的編碼方式。默認(rèn)為平臺(tái)相關(guān)編碼。
      • items:指定一個(gè)或多個(gè)資源項(xiàng),進(jìn)一步定義資源文件的行為。
      • nonFiltered:指定不進(jìn)行過濾的資源文件路徑模式。

示例:

<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>
  • 定義了兩個(gè)插件:maven-compiler-plugin和spring-boot-maven-plugin,并配置了maven-compiler-plugin的源代碼和目標(biāo)代碼版本為1.8。
  • 指定了使用src/main/resources目錄下的.properties和.xml文件作為項(xiàng)目資源文件。

版本控制信息

元素名稱描述
scm配置源代碼管理系統(tǒng)(如Git、SVN)的信息
- scm

scm元素用于定義一個(gè)項(xiàng)目的源代碼管理(SCM)信息,以便Maven可以從這個(gè)倉庫中檢索和構(gòu)建代碼。

一個(gè)完整的scm元素至少應(yīng)該包括兩個(gè)必需的子元素:connection和developerConnection,它們分別表示開發(fā)者與版本控制庫之間的連接方式。另外,還可以使用url、tag、branch等其他子元素進(jìn)一步指定SCM信息。

scm子元素:

  • connection:源代碼倉庫的連接 URL,用于從 SCM 獲取元數(shù)據(jù)。
  • developerConnection:開發(fā)者用來推送代碼的連接 URL,通常是私有的。
  • url:公開的源代碼倉庫訪問 URL,通常用于查看源代碼。
  • tag:源代碼倉庫中的標(biāo)簽,標(biāo)識(shí)一個(gè)特定的版本。
  • branch:源代碼倉庫中的分支名稱,表示開發(fā)或發(fā)布的分支。
  • commit:指定源代碼的某個(gè)特定提交(哈希值),確保構(gòu)建時(shí)使用正確的代碼。
  • checkoutDirectory:源碼檢出的目錄路徑,默認(rèn)是項(xiàng)目根目錄,指定了檢出源代碼的具體路徑。

SCM的用途:

  • 通過指定源代碼的版本控制系統(tǒng)信息,使得其他開發(fā)者能夠更輕松地將項(xiàng)目檢出到本地環(huán)境中,并參與項(xiàng)目的開發(fā)。
  • 在項(xiàng)目構(gòu)建期間,Maven可以利用SCM配置來自動(dòng)從版本控制系統(tǒng)中獲取源代碼,并構(gòu)建項(xiàng)目。
  • 通過指定版本控制系統(tǒng)的分支或標(biāo)簽信息,Maven可以構(gòu)建特定版本的項(xiàng)目,從而方便項(xiàng)目的發(fā)布和部署。
  • SCM配置還可以用于指定版本控制系統(tǒng)的URL,以便Maven可以自動(dòng)地為項(xiàng)目生成構(gòu)建信息和版本號(hào)等元數(shù)據(jù),這些信息對(duì)于跟蹤和管理項(xiàng)目非常重要。

示例:

<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>

上述代碼中,定義了一個(gè)基于Git的源代碼管理信息。

其中,connection元素通過https協(xié)議指定了與代碼庫的連接方式,而developerConnection元素則通過ssh協(xié)議進(jìn)行連接。除此之外,還指定了代碼庫的URL(即主頁地址)以及打標(biāo)簽時(shí)使用的默認(rèn)tag。

分發(fā)信息

元素名稱描述
distributionManagement配置項(xiàng)目的分發(fā)方式,如發(fā)布到Maven倉庫或其他服務(wù)
- distributionManagement
  • distributionManagement元素用于管理您構(gòu)建后部署(或發(fā)布)到哪里。該元素中包含了各種子元素,用于指定項(xiàng)目的發(fā)行版本部署(或發(fā)布)相關(guān)配置。
  • distributionManagement元素只是用于管理項(xiàng)目的分發(fā)版本部署(或發(fā)布)的相關(guān)配置,而不會(huì)影響項(xiàng)目的編譯和構(gòu)建過程。

示例:

<distributionManagement>
  <repository>
    <id>internal.repo</id>
    <name>Internal Repository</name>
    <url>file:///usr/local/repo</url>
  </repository>
</distributionManagement>

在上面的示例中,我們聲明了一個(gè)名為"Internal Repository"的倉庫,其地址為本地文件系統(tǒng)上的/usr/local/repo目錄。

一旦定義了這個(gè)倉庫之后,可以使用命令 mvn deploy 將此存儲(chǔ)庫作為項(xiàng)目的部署目標(biāo),在構(gòu)建過程中上傳并部署項(xiàng)目至該存儲(chǔ)庫。

報(bào)告配置

元素名稱描述
reporting配置如何生成項(xiàng)目報(bào)告,如代碼質(zhì)量報(bào)告、測(cè)試報(bào)告等
- reporting

reporting元素用于為項(xiàng)目生成一些報(bào)告,例如代碼覆蓋率、靜態(tài)代碼分析結(jié)果等。該元素可以包含各種子元素,來配置需要生成哪些報(bào)告,以及如何生成這些報(bào)告。

reporting元素只是用于配置Maven生成報(bào)告的相關(guān)信息,它不影響項(xiàng)目的編譯和構(gòu)建過程,并且生成的報(bào)告通常是基于已經(jīng)構(gòu)建好的代碼來進(jìn)行分析處理的。

示例:

<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>

在上面的示例中,我們定義了兩個(gè)插件,分別是Jacoco和SonarQube。通過使用這些插件,Maven可以生成有關(guān)代碼覆蓋率、靜態(tài)代碼分析的報(bào)告。其他可供選擇的報(bào)告插件包括FindBugs、Checkstyle、Javadoc等。

環(huán)境配置

元素名稱描述
profiles定義不同構(gòu)建環(huán)境下的配置文件,可根據(jù)需求啟用不同的構(gòu)建配置
- profiles

profiles元素用于定義一個(gè)或多個(gè)構(gòu)建“配置”(profile),這些配置與通常的構(gòu)建選項(xiàng)不同,能夠根據(jù)不同的環(huán)境、需求等情況進(jìn)行靈活地管理不同構(gòu)建環(huán)境下的項(xiàng)目配置和依賴項(xiàng)。

profile

一個(gè)profile元素可以包含多個(gè)子元素,如id、activation、properties、dependencies等,每個(gè)子元素又可以包含具體的配置信息。

  • id(名稱):必需,用于給對(duì)應(yīng)的構(gòu)建配置指定一個(gè)名稱。
  • activation(激活條件):用于指定觸發(fā)profile的條件,如:系統(tǒng)屬性、JDK版本、Maven版本、操作系統(tǒng)等。
  • properties(屬性):定義profile中使用的屬性值。這些屬性可以被其他元素引用,以便在不同的環(huán)境下使用不同的值。
  • dependencies(依賴):指定與profile相關(guān)的依賴項(xiàng)。這些依賴項(xiàng)僅在激活profile時(shí)才會(huì)被添加到項(xiàng)目中。
  • dependencyManagement(依賴管理):類似于dependencies,但是它只定義依賴版本號(hào),而不引入實(shí)際依賴。
  • build(構(gòu)建):用于定義與profile相關(guān)的構(gòu)建設(shè)置,例如編譯器版本、打包方式等。
  • reporting(報(bào)告):指定生成報(bào)告時(shí)使用的插件和配置。
  • modules(模塊):定義特定的modules,這些modules僅在激活profile時(shí)才會(huì)被構(gòu)建。
  • repositories(倉庫):指定與profile相關(guān)的倉庫配置。

在POM文件中定義了Profile元素之后,可以根據(jù)所需的構(gòu)建環(huán)境激活或禁用它們。

要激活Profile元素,可以使用命令行選項(xiàng)、環(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>

上述代碼中,定義了一個(gè)名為development的構(gòu)建配置,啟動(dòng)該配置的條件為默認(rèn)激活(activeByDefault)。該配置使用MySQL驅(qū)動(dòng)程序作為依賴項(xiàng),并設(shè)置了jdbc.driverClassName屬性值,以便在開發(fā)環(huán)境中使用正確的數(shù)據(jù)庫連接驅(qū)動(dòng)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java的Proxy動(dòng)態(tài)代理機(jī)制

    詳解Java的Proxy動(dòng)態(tài)代理機(jī)制

    Java有兩種代理方式,一種是靜態(tài)代理,另一種是動(dòng)態(tài)代理。對(duì)于靜態(tài)代理,其實(shí)就是通過依賴注入,對(duì)對(duì)象進(jìn)行封裝,不讓外部知道實(shí)現(xiàn)的細(xì)節(jié)。很多 API 就是通過這種形式來封裝的
    2021-06-06
  • SpringBoot配置Email發(fā)送功能實(shí)例

    SpringBoot配置Email發(fā)送功能實(shí)例

    本篇文章主要介紹了SpringBoot配置Email發(fā)送功能實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 使用Java實(shí)現(xiàn)加密之AES加解密

    使用Java實(shí)現(xiàn)加密之AES加解密

    這篇文章主要介紹了使用Java實(shí)現(xiàn)加密之AES加解密,AES為最常見的對(duì)稱加密算法,對(duì)稱加密算法也就是加密和解密用相同的密鑰,需要的朋友可以參考下
    2023-05-05
  • springboot 啟動(dòng)如何排除某些bean的注入

    springboot 啟動(dòng)如何排除某些bean的注入

    這篇文章主要介紹了springboot 啟動(dòng)如何排除某些bean的注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java設(shè)計(jì)模式之策略模式詳解

    Java設(shè)計(jì)模式之策略模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之策略模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路

    MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路

    這篇文章主要介紹了MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • java 創(chuàng)建自定義數(shù)組

    java 創(chuàng)建自定義數(shù)組

    本篇文章是關(guān)于java 如何自己創(chuàng)建自定義數(shù)組,這里給大家一個(gè)小實(shí)例,希望能幫助有所需要的同學(xué)
    2016-07-07
  • Mybatis-Plus中的MetaObjectHandler組件的使用

    Mybatis-Plus中的MetaObjectHandler組件的使用

    MetaObjectHandler是Mybatis-Plus中一個(gè)實(shí)用組件,專門用于自動(dòng)處理實(shí)體對(duì)象中的特定字段,如創(chuàng)建時(shí)間、更新時(shí)間、創(chuàng)建人和修改人等,該接口允許開發(fā)者在不修改業(yè)務(wù)代碼的情況下,實(shí)現(xiàn)自動(dòng)填充功能,極大地簡化了代碼的復(fù)雜性,感興趣的可以了解一下
    2024-10-10
  • Java拋出異常與自定義異常類應(yīng)用示例

    Java拋出異常與自定義異常類應(yīng)用示例

    這篇文章主要介紹了Java拋出異常與自定義異常類,結(jié)合實(shí)例形式分析了Java針對(duì)錯(cuò)誤與異常處理的try、catch、throw等語句相關(guān)使用技巧,需要的朋友可以參考下
    2019-03-03
  • Spring AbstractRoutingDatasource 動(dòng)態(tài)數(shù)據(jù)源的實(shí)例講解

    Spring AbstractRoutingDatasource 動(dòng)態(tài)數(shù)據(jù)源的實(shí)例講解

    本文介紹如何使用 Spring AbstractRoutingDatasource 基于上下文動(dòng)態(tài)切換數(shù)據(jù)源,因此我們會(huì)讓查找數(shù)據(jù)源邏輯獨(dú)立于數(shù)據(jù)訪問之外
    2021-07-07

最新評(píng)論