中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做網(wǎng)站送郵箱中文域名

做網(wǎng)站送郵箱,中文域名,怎么做關(guān)注網(wǎng)站,wordpress獲取分類文件文章目錄 一、Maven介紹1、什么是Maven2、Maven的核心功能 二、Maven核心概念1、坐標(biāo)GAVP1.1、GroupId1.2、ArtifactId1.3、Version1.3.1、版本號的組成 1.4、Packaging 2、POM、父POM和超級POM2.1、POM (Project Object Model)2.1、父POM(Parent POM)2.…

文章目錄

  • 一、Maven介紹
    • 1、什么是Maven
    • 2、Maven的核心功能
  • 二、Maven核心概念
    • 1、坐標(biāo)GAVP
      • 1.1、GroupId
      • 1.2、ArtifactId
      • 1.3、Version
        • 1.3.1、版本號的組成
      • 1.4、Packaging
    • 2、POM、父POM和超級POM
      • 2.1、POM (Project Object Model)
      • 2.1、父POM(Parent POM)
      • 2.3、超級POM(Super POM)
      • 2.4、有效POM(Effective POM)
        • 2.4.1、如何查看有效POM?
        • 2.4.2、有效POM的用途
  • 三、Maven依賴管理
    • 1、依賴范圍
      • 1.1、compile(編譯范圍)
      • 1.2、provided(已提供范圍)
      • 1.3、runtime(運行時范圍)
      • 1.4、test(測試范圍)
      • 1.5、system(系統(tǒng)范圍)
      • 1.6、import(導(dǎo)入范圍)
    • 2、依賴傳遞
      • 2.1、依賴傳遞的作用范圍
      • 2.2、可選依賴
      • 2.3、依賴沖突與版本控制
  • 四、Maven工程構(gòu)建
    • 1、生命周期
    • 2、構(gòu)建命令
      • 2.1、常見組合命令
      • 2.2、命令選項
    • 3、插件
      • 3.1、Maven默認的插件
      • 3.2、生成微服務(wù)可運行jar包
        • 3.2.1、添加spring-boot-maven-plugin插件后的打包流程
        • 3.2.2、常規(guī)打包方式
        • 3.2.3、進階打包方式
      • 3.3、\<resources>標(biāo)簽
  • 五、Maven繼承和聚合
    • 1、繼承
      • 1.1、父項目的pom.xml
      • 1.2、子項目pom.xml
        • 1.2.1、\<relativePath>標(biāo)簽
    • 2、聚合
  • 五、Maven倉庫
    • 1、Maven倉庫
      • 1.1、本地倉庫(Local Repository)
      • 1.2、中央倉庫(Central Repository)
      • 1.3、遠程倉庫(Remote Repository)
      • 1.4、Maven倉庫的工作原理
    • 2、Maven私服
      • 2.1、Nexus倉庫
      • 2.2、通過Nexus下載jar包
      • 2.3、將jar包部署到Nexus
    • 3、repositories和mirrors
      • 3.1、repositories(倉庫)
      • 3.2、mirrors(鏡像)

一、Maven介紹

1、什么是Maven

??Maven是Apache軟件基金會開發(fā)的一款項目管理構(gòu)建工具,主要用于Java 項目的構(gòu)建依賴管理項目生命周期管理。Maven通過聲明性配置(XML 文件)定義項目構(gòu)建流程及依賴項,使得項目管理更簡單、更高效,特別適合于多模塊、大型項目。

2、Maven的核心功能

  • 依賴管理:自動解析、下載和管理項目所需的外部依賴庫,避免手動查找和添加 JAR 包
  • 構(gòu)建管理:通過標(biāo)準(zhǔn)化的構(gòu)建生命周期(例如 clean、compile、test、package、install、deploy),幫助用戶自動化地編譯代碼、運行測試、打包成JAR/WAR包等
  • 插件擴展:Maven 擁有豐富的插件生態(tài)系統(tǒng),能夠擴展構(gòu)建過程中的功能,包括代碼質(zhì)量檢查、測試覆蓋率報告、打包部署等
  • 項目統(tǒng)一管理:Maven允許通過父子項目、聚合項目等結(jié)構(gòu),統(tǒng)一管理多模塊項目,使團隊協(xié)作更高效

二、Maven核心概念

1、坐標(biāo)GAVP

??在Maven中,GAVP是構(gòu)建項目的四個核心屬性的縮寫,分別代表GroupIdArtifactId、VersionPackaging。這四個屬性在pom.xml文件中定義,用于唯一標(biāo)識一個Maven項目或依賴。

1.1、GroupId

  • 定義:項目或組件的組ID,通常表示項目所在的組織、公司或團隊
  • 用途:幫助區(qū)分不同的項目組和模塊。GroupId通常以域名倒置的格式(如com.example)命名,以避免命名沖突
  • 示例
    <groupId>com.example</groupId>
    

1.2、ArtifactId

  • 定義:項目或模塊的標(biāo)識符,是項目的名稱或模塊名稱,通常是小寫的、簡短的名稱
  • 用途:用于唯一標(biāo)識項目中的某個模塊。通常一個項目會有多個模塊,每個模塊的ArtifactId都是唯一的
  • 示例
    <artifactId>my-app</artifactId>
    

1.3、Version

  • 定義:項目的版本號,通常遵循語義化版本號(如1.0.0、1.0-SNAPSHOT等)
  • 用途:幫助區(qū)分不同版本的構(gòu)件。Maven支持SNAPSHOT版本(用于開發(fā)階段)和RELEASE版本(用于發(fā)布的穩(wěn)定版本)
  • 示例
    <version>1.0.0</version>
    
1.3.1、版本號的組成
  • Maven的版本號通常由主版本號、次版本號、補丁版本號標(biāo)識符組成。其基本格式如下:
<major>.<minor>.<patch>-<qualifier>
  • 主版本號 (Major Version)
    • 作用: 主版本號在項目發(fā)生重大更改,可能導(dǎo)致向后不兼容時會更新。例如,修改了API接口或刪除了某些功能,升級主版本號
    • 示例: 1.0.02.0.0
  • 次版本號 (Minor Version)
    • 作用: 次版本號通常表示項目有了新功能,但向后兼容。例如,增加了新功能,但不影響現(xiàn)有功能的使用
    • 示例: 1.0.01.1.0
  • 補丁版本號 (Patch Version)
    • 作用: 補丁版本號通常用于修復(fù)錯誤或進行小的改進,確保向后兼容
    • 示例: 1.0.01.0.1
  • 標(biāo)識符 (Qualifier)
    • 作用: 標(biāo)識符用于標(biāo)識預(yù)發(fā)布版本或特殊版本,比如快照版本、測試版或里程碑版本
    • 常見的附加標(biāo)識符有以下幾種
附加標(biāo)識符含義適用階段示例
SNAPSHOT開發(fā)中的不穩(wěn)定版本,尚未發(fā)布開發(fā)過程1.0.0-SNAPSHOT
ALPHA早期測試版本,可能包含較多 bug,功能未完全實現(xiàn)內(nèi)部測試1.0.0-ALPHA
BETA穩(wěn)定性較高的測試版本,功能基本完成公開測試1.0.0-BETA
RC候選發(fā)布版本,接近正式版本發(fā)布前測試1.0.0-RC1
M里程碑版本,標(biāo)志關(guān)鍵特性的階段性完成項目階段性成果1.0.0-M1
GA正式發(fā)布版本,供所有用戶使用正式發(fā)布1.0.0-GA
FINAL最終穩(wěn)定版本,適合大規(guī)模使用正式發(fā)布1.0.0-FINAL
HOTFIX緊急修復(fù)版本,快速解決嚴(yán)重問題緊急修復(fù)1.0.1-HOTFIX
DEV開發(fā)版本,類似于 SNAPSHOT開發(fā)過程1.0.0-DEV
CUSTOM定制版本,針對特定客戶或項目需求定制化發(fā)布1.0.0-CUSTOM
PREVIEW預(yù)覽版本,展示即將發(fā)布的功能用戶或客戶展示1.0.0-PREVIEW
CANARY實驗版,用于有限發(fā)布和生產(chǎn)環(huán)境驗證實驗性發(fā)布1.0.0-CANARY
EAPEarly Access Program,早期訪問版內(nèi)部或有限外部訪問1.0.0-EAP
NIGHTLY每晚構(gòu)建的版本,通常用于開發(fā)中的自動化測試開發(fā)過程1.0.0-NIGHTLY
STAGING預(yù)發(fā)布版本,通常用于發(fā)布到生產(chǎn)環(huán)境前的測試預(yù)生產(chǎn)環(huán)境1.0.0-STAGING
TEST用于測試目的的版本,可能包含調(diào)試信息內(nèi)部測試1.0.0-TEST
INTEGRATION用于集成測試的版本集成測試1.0.0-INTEGRATION
DEMO演示版本,通常用于客戶或內(nèi)部展示展示用途1.0.0-DEMO
EXPERIMENTAL實驗版本,包含實驗性功能或不穩(wěn)定的更改開發(fā)測試1.0.0-EXPERIMENTAL
LTS長期支持版本,通常包含穩(wěn)定且經(jīng)驗證的功能正式發(fā)布1.0.0-LTS
RELEASE穩(wěn)定的正式發(fā)布版本,類似于 GA 和 FINAL正式發(fā)布1.0.0-RELEASE
ROLLOUT漸進式發(fā)布版本,逐步向用戶推廣漸進式發(fā)布1.0.0-ROLLOUT
PATCH小型補丁版本,用于特定問題的快速修復(fù)快速修復(fù)1.0.1-PATCH
  • snapshot表示快照版,它不是個穩(wěn)定版本,屬于開發(fā)過程中使用的版本
  • 當(dāng)一個項目開發(fā)完成后,就會進入測試版本,而測試版本一般會分為內(nèi)部測試alpha版、外部測試beta版兩種
  • 當(dāng)測試通過后,將會進入正式版本,大部分的正式版是啥也不帶,就一個單純的版本號,比如1.0、1.7.1等。也有個別的是這些rc、final、release、ga

1.4、Packaging

  • 定義:指定項目的打包類型,決定了Maven最終生成的文件格式
  • 常見的打包類型
    • jar:用于生成Java的jar文件
    • war:用于生成Web應(yīng)用的war文件
    • pom:通常用于父項目聚合項目,表示該項目不會打包成可執(zhí)行文件,而是用于組織多個模塊
  • 示例
    <packaging>jar</packaging>
    

2、POM、父POM和超級POM

2.1、POM (Project Object Model)

??POM是Maven項目的核心文件,通常命名為pom.xml,包含了項目的配置信息、依賴關(guān)系、插件、構(gòu)建設(shè)置等。每個Maven項目都需要一個POM文件,它決定了如何構(gòu)建和管理項目。

以下是一個詳細的 pom.xml 樣例:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><!-- modelVersion: 定義 POM 文件的版本,通常為 4.0.0 --><modelVersion>4.0.0</modelVersion><!-- groupId: 項目的組 ID,通常是項目所在組織的域名反轉(zhuǎn)形式 --><groupId>com.example</groupId><!-- artifactId: 項目的標(biāo)識符,通常是項目的名稱 --><artifactId>my-app</artifactId><!-- version: 項目的版本號 --><version>1.0.0</version><!-- packaging: 打包類型,默認為 jar。其他值可以是 war、pom 等 --><packaging>jar</packaging><!-- name: 項目的名稱(可選) --><name>My Application</name><!-- description: 項目的簡短描述(可選) --><description>This is my first Maven project.</description><!-- url: 項目主頁的 URL(可選) --><url>http://www.example.com/my-app</url><!-- licenses: 項目使用的許可證信息 --><licenses><license><name>Apache License, Version 2.0</name><url>http://www.apache.org/licenses/LICENSE-2.0</url><distribution>repo</distribution></license></licenses><!-- developers: 項目的開發(fā)人員信息 --><developers><developer><id>johndoe</id><name>John Doe</name><email>johndoe@example.com</email><organization>Example Org</organization><roles><role>developer</role></roles></developer></developers><!-- dependencies: 定義項目依賴的外部庫 --><dependencies><dependency><!-- groupId: 依賴的組 ID --><groupId>org.springframework</groupId><!-- artifactId: 依賴的標(biāo)識符 --><artifactId>spring-core</artifactId><!-- version: 依賴的版本 --><version>5.2.9.RELEASE</version><!-- scope: 依賴的作用范圍,默認為 compile,還可以是 test、provided、runtime 等 --><scope>compile</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope> <!-- 僅在測試階段使用 --></dependency></dependencies><!-- build: 構(gòu)建配置,如插件、資源等 --><build><plugins><plugin><!-- 編譯插件 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><!-- 設(shè)置 Java 編譯版本 --><source>1.8</source><target>1.8</target></configuration></plugin><plugin><!-- 測試報告生成插件 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version></plugin></plugins></build><!-- properties: 項目屬性,通常用來定義全局變量 --><properties><!-- Maven 編譯器的 Java 源代碼版本 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><!-- repositories: 自定義 Maven 倉庫 --><repositories><repository><id>central</id><name>Maven Central Repository</name><url>https://repo.maven.apache.org/maven2</url></repository></repositories><!-- profiles: 定義構(gòu)建配置的不同環(huán)境 --><profiles><profile><id>development</id><properties><!-- 開發(fā)環(huán)境專用屬性 --><maven.compiler.source>11</maven.compiler.source></properties></profile><profile><id>production</id><properties><!-- 生產(chǎn)環(huán)境專用屬性 --><maven.compiler.source>1.8</maven.compiler.source></properties></profile></profiles>
</project>

2.1、父POM(Parent POM)

??父POM文件位于項目的根目錄,通常用于多模塊項目的配置。它包含公共依賴項、插件版本、構(gòu)建配置等,供子模塊繼承。父POM可以被稱為“聚合POM”或“根POM”,并且會定義<modules>標(biāo)簽來指定所有子模塊。

以下是一個詳細的父pom.xml 樣例:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><!-- modelVersion: 定義 POM 文件的版本,通常為 4.0.0 --><modelVersion>4.0.0</modelVersion><!-- groupId: 定義父 POM 的組 ID --><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0.0</version><!-- packaging: 父 POM 一般使用 pom 作為打包類型 --><packaging>pom</packaging><!-- modules: 定義子模塊 --><modules><module>module-one</module><module>module-two</module></modules><!-- properties: 定義共享的屬性,用于子項目繼承 --><properties><!-- 定義所有模塊的全局 Java 編譯器版本 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!-- 項目版本定義,可供子模塊繼承使用 --><spring.version>5.2.9.RELEASE</spring.version><junit.version>4.13.1</junit.version></properties><!-- dependencyManagement: 用于管理子模塊的依賴版本 --><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement><!-- build: 配置構(gòu)建相關(guān)信息 --><build><plugins><plugin><!-- maven-compiler-plugin 插件,用于設(shè)置編譯器版本 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target></configuration></plugin><plugin><!-- maven-surefire-plugin 插件,用于執(zhí)行單元測試 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version></plugin></plugins></build><!-- profiles: 用于定義不同環(huán)境下的構(gòu)建配置 --><profiles><profile><id>development</id><properties><!-- 開發(fā)環(huán)境中使用 Java 11 --><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties></profile><profile><id>production</id><properties><!-- 生產(chǎn)環(huán)境中使用 Java 8 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties></profile></profiles><!-- repositories: 定義自定義 Maven 倉庫 --><repositories><repository><id>central</id><url>https://repo.maven.apache.org/maven2</url></repository></repositories>
</project>

2.3、超級POM(Super POM)

??超級POM是Maven提供的默認全局POM文件,所有的Maven項目都會隱式繼承這個超級POM。它是Maven的頂級POM,定義了Maven項目構(gòu)建的默認行為。即使項目沒有顯式指定任何父POM,它也會自動繼承超級POM中的基本設(shè)置。

??超級pom定義在maven-model-builder.jar中,如果想查看其定義,需要將jar包解壓,解壓后超級pom的完整路徑為: maven 安裝目錄\lib\maven-model-builder-3.8.6.jar\org\apache\maven\model\pom-4.0.0.xml,內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?><project><!-- 定義 POM 文件的版本,通常為 4.0.0 --><modelVersion>4.0.0</modelVersion><!-- repositories 元素定義 Maven 用于解析依賴的倉庫 --><repositories><repository><!-- id 是倉庫的唯一標(biāo)識符,代表 Maven Central 倉庫 --><id>central</id><!-- name 是倉庫的名稱,描述性字段 --><name>Central Repository</name><!-- url 定義了倉庫的網(wǎng)絡(luò)地址 --><url>https://repo.maven.apache.org/maven2</url><!-- layout 定義了倉庫的布局,默認為 default --><layout>default</layout><snapshots><!-- 禁用從該倉庫下載快照版本 --><enabled>false</enabled></snapshots></repository></repositories><!-- pluginRepositories 元素用于定義 Maven 插件的倉庫 --><pluginRepositories><pluginRepository><!-- 插件倉庫的唯一標(biāo)識符,與普通倉庫類似 --><id>central</id><!-- 倉庫的名稱 --><name>Central Repository</name><!-- 倉庫的 URL 地址 --><url>https://repo.maven.apache.org/maven2</url><!-- 倉庫的布局,默認值為 default --><layout>default</layout><snapshots><!-- 禁用快照版本的插件下載 --><enabled>false</enabled></snapshots><releases><!-- 定義如何更新發(fā)布版本的策略,never 表示從不更新 --><updatePolicy>never</updatePolicy></releases></pluginRepository></pluginRepositories><!-- build 元素定義了構(gòu)建過程中的目錄、插件和資源管理 --><build><!-- 定義編譯輸出的目錄,通常為 target 文件夾 --><directory>${project.basedir}/target</directory><!-- 定義編譯后的類文件的輸出目錄 --><outputDirectory>${project.build.directory}/classes</outputDirectory><!-- 定義構(gòu)建輸出文件的最終名稱,通常包括 artifactId 和版本號 --><finalName>${project.artifactId}-${project.version}</finalName><!-- 定義測試編譯后的輸出目錄 --><testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory><!-- Java 源代碼的目錄,默認為 src/main/java --><sourceDirectory>${project.basedir}/src/main/java</sourceDirectory><!-- 腳本源文件的目錄 --><scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory><!-- 測試源代碼的目錄,默認為 src/test/java --><testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory><!-- 定義項目的主資源文件目錄,通常用于配置文件等 --><resources><resource><directory>${project.basedir}/src/main/resources</directory></resource></resources><!-- 定義測試資源文件目錄 --><testResources><testResource><directory>${project.basedir}/src/test/resources</directory></testResource></testResources><!-- pluginManagement 元素管理所有的插件版本和配置,供子項目繼承 --><pluginManagement><!-- NOTE: 以下插件將在未來版本的超級 POM 中移除 --><plugins><!-- 定義了 maven-antrun-plugin 插件及其版本 --><plugin><artifactId>maven-antrun-plugin</artifactId><version>1.3</version></plugin><!-- 定義了 maven-assembly-plugin 插件及其版本,用于生成項目打包配置 --><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.2-beta-5</version></plugin><!-- 定義了 maven-dependency-plugin 插件及其版本,管理項目依賴 --><plugin><artifactId>maven-dependency-plugin</artifactId><version>2.8</version></plugin><!-- 定義了 maven-release-plugin 插件及其版本,管理項目發(fā)布流程 --><plugin><artifactId>maven-release-plugin</artifactId><version>2.5.3</version></plugin></plugins></pluginManagement></build><!-- reporting 元素用于生成項目報告的輸出目錄 --><reporting><outputDirectory>${project.build.directory}/site</outputDirectory></reporting><!-- profiles 元素定義了項目的構(gòu)建配置文件需要mvn clean install -DperformRelease=true才能生效--><profiles><!-- 定義一個 profile,名為 release-profile --><profile><id>release-profile</id><!-- activation 元素定義激活 profile 的條件 --><activation><!-- 當(dāng)屬性 performRelease 為 true 時激活此 profile --><property><name>performRelease</name><value>true</value></property></activation><build><plugins><!-- 繼承自父 POM 的 maven-source-plugin 插件 --><plugin><inherited>true</inherited><artifactId>maven-source-plugin</artifactId><executions><execution><id>attach-sources</id><goals><!-- 生成源碼 jar 包 --><goal>jar-no-fork</goal></goals></execution></executions></plugin><!-- 繼承自父 POM 的 maven-javadoc-plugin 插件,用于生成 Javadoc --><plugin><inherited>true</inherited><artifactId>maven-javadoc-plugin</artifactId><executions><execution><id>attach-javadocs</id><goals><!-- 生成 Javadoc jar 包 --><goal>jar</goal></goals></execution></executions></plugin><!-- 繼承自父 POM 的 maven-deploy-plugin 插件 --><plugin><inherited>true</inherited><artifactId>maven-deploy-plugin</artifactId><configuration><!-- 配置更新發(fā)布信息 --><updateReleaseInfo>true</updateReleaseInfo></configuration></plugin></plugins></build></profile></profiles></project>

??也正是超級pom中build元素定義了構(gòu)建過程中的源碼文件配置文件等資源目錄,才有如下約定的目錄要求。

在這里插入圖片描述

2.4、有效POM(Effective POM)

??有效POM(Effective POM)是Maven生成的最終POM文件,它將項目POM文件與父POM、超級POM以及各種繼承和聚合的配置組合在一起,形成一個完整的項目配置。有效POM包含了項目中所有繼承的配置、依賴、插件等信息,即項目實際構(gòu)建時使用的完整POM。

2.4.1、如何查看有效POM?
mvn help:effective-pom

示例輸出:

<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-project</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version></plugin><plugin><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version></plugin><!-- 其他插件 --></plugins></build><dependencies><!-- 列出所有依賴,包括直接聲明的和繼承來的 --></dependencies><!-- 其他配置 -->
</project>

??如果使用mvn help:effective-pom命令時,輸出的內(nèi)容過多導(dǎo)致最上面的部分被截斷輸出到文件并打開。

  • 在Linux或macOS中,執(zhí)行以下命令可以將輸出保存到文件后立即打開它
mvn help:effective-pom > effective-pom.xml && open effective-pom.xml
  • 在Windows上可以使用
mvn help:effective-pom > effective-pom.xml && start effective-pom.xml
2.4.2、有效POM的用途
  • 調(diào)試配置問題:幫助你理解為什么某個依賴或插件會被使用,或者為何某個插件沒有被使用
  • 查看默認插件:幫助查看所有自動添加的插件和它們的版本
  • 驗證繼承和聚合:確保項目繼承了正確的配置,尤其是當(dāng)項目使用多模塊或父子POM時

三、Maven依賴管理

??Maven依賴管理是Maven最強大的功能之一,它通過自動下載和管理項目所需的外部庫插件,使開發(fā)者無需手動配置這些依賴項。

1、依賴范圍

  • 通過設(shè)置坐標(biāo)的依賴范圍,可以設(shè)置對應(yīng)jar包的作用范圍
    • 編譯環(huán)境:在源代碼的目錄src/main/java下可以使用
    • 測試環(huán)境:在測試源代碼的目錄src/test/java下可以使用
    • 運行環(huán)境:生成的war或可執(zhí)行jar的lib下有對應(yīng)的jar

1.1、compile(編譯范圍)

  • 描述:默認依賴范圍。所有沒有明確指定范圍的依賴,都會使用compile范圍
  • 作用:在編譯測試運行時均可用
  • 使用場景:對于大多數(shù)核心庫,如框架類庫(例如 Spring),都應(yīng)使用compile范圍
  • 示例:
    <dependency><groupId>org.example</groupId><artifactId>example-lib</artifactId><version>1.0</version>
    </dependency>
    

1.2、provided(已提供范圍)

  • 描述:運行時需要由應(yīng)用服務(wù)器或容器提供該依賴
  • 作用:在編譯測試時可用,但不會在運行時包含在打包文件中
  • 使用場景:適用于需要在應(yīng)用服務(wù)器或其他容器(如 Tomcat)中提供的依賴。例如,Servlet API 需要由 Web 服務(wù)器提供
  • 示例:
    <dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
    </dependency>
    
  • 如圖tomcat也就是部署的服務(wù)器本身就提供了
    在這里插入圖片描述

1.3、runtime(運行時范圍)

  • 描述:主要用于那些不在編譯階段使用,但需要在項目運行時加載的庫
  • 作用:在運行測試時可用,但不會在編譯時使用
  • 使用場景:JDBC驅(qū)動實現(xiàn)依賴,其在編譯時只需JDK提供的JDBC接口,只有測試、運行階段才需要實現(xiàn)了JDBC接口的驅(qū)動
  • 示例:
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version><scope>runtime</scope>
    </dependency>
    

1.4、test(測試范圍)

  • 描述:通常用于JUnit、TestNG等測試框架
  • 作用:只在測試環(huán)境src/test/java下可用,編譯和運行時不可用
  • 使用場景:適用于所有測試相關(guān)的庫,如測試框架
  • 示例:
    <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
    </dependency>
    

1.5、system(系統(tǒng)范圍)

  • 描述:系統(tǒng)范圍的依賴類似于provided,但它需要手動提供JAR文件,并通過systemPath明確指明依賴的路徑
  • 作用:在編譯測試時可用,但不會在運行時包含。project.basedir是maven的預(yù)定義變量,表示當(dāng)前項目的根目錄路徑
  • 使用場景:適用于系統(tǒng)自帶的庫,或需要本地使用的特定JAR文件
  • 打包插件配置<includeSystemScope>true</includeSystemScope>,否則可執(zhí)行jar中l(wèi)ib沒有此依賴
  • 示例:
      <dependency><groupId>com.xc.maven</groupId><artifactId>xc-maven-test</artifactId><version>1.0-SNAPSHOT</version><systemPath>${project.basedir}/src/main/resources/lib/open-api-sdk-2.0.jar</systemPath><scope>system</scope></dependency><!--配合打包插件配置--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins></build>
    

1.6、import(導(dǎo)入范圍)

  • 描述:import是一種特殊的依賴范圍,通常在依賴管理(<dependencyManagement>)中使用,用來導(dǎo)入POM類型的依賴。通過import,可以將另一個POM中定義的依賴管理配置應(yīng)用到當(dāng)前項目中
  • 作用:引入另一項目的依賴配置,不直接應(yīng)用于編譯、測試或運行時
  • 使用場景:在一個父pom中的dependencyManagement標(biāo)簽中需要導(dǎo)入另一個pom中的dependencyManagement的時候
  • <type>元素用于指定依賴的打包類型,默認依賴是.jar文件,是最常見的依賴類型
  • 示例:
    <dependencyManagement><dependency><groupId>org.example</groupId><artifactId>example-dependencies</artifactId><version>1.0</version><type>pom</type><scope>import</scope></dependency>
    </dependencyManagement>
    

<type>單獨使用的場景

  • 指定依賴的類型為POM,表明這是一個POM文件,而不是一個實際的庫
  • 這個配置用于將指定POM文件中的依賴管理其他配置引入到當(dāng)前項目中
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.11</version><type>pom</type></dependency>
</dependencies>

2、依賴傳遞

??假設(shè)項目A依賴于庫B,而庫B依賴于庫C,那么當(dāng)你在項目A中聲明依賴庫B時,Maven會自動為你將庫C也加入到A的類路徑中。這就是依賴傳遞的效果,Maven會遞歸解析每個依賴的依賴。

2.1、依賴傳遞的作用范圍

??Maven支持不同的依賴范圍(scope)依賴傳遞的行為會受到這些范圍的影響。以下是各范圍在依賴傳遞中的行為:

作用范圍傳遞性原因
compile默認范圍,可在編譯、運行和測試時使用,傳遞性強
provided僅在編譯和測試時使用,不會在運行時加入,傳遞性關(guān)閉
runtime僅在運行時使用,編譯時不可用,傳遞性仍然保留
test僅在測試時使用,不會傳遞給其他模塊
system需要手動指定的外部依賴,不能傳遞
import僅導(dǎo)入依賴管理僅用于導(dǎo)入依賴管理,不導(dǎo)入具體依賴

2.2、可選依賴

??當(dāng)你為某個依賴指定<optional>true</optional>時,這個依賴就不會自動傳遞給下游的依賴(即其他依賴這個項目的項目)。一句話,阻止依賴傳遞。

<!--熱部署依賴 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional>
</dependency>

2.3、依賴沖突與版本控制

??Maven通過依賴傳遞機制可能會引入多個不同版本的同一個庫,這時就會發(fā)生依賴沖突

依賴沖突優(yōu)先級規(guī)則

  • 首要判斷:最短路徑優(yōu)先
    在這里插入圖片描述

  • 再者判斷:路徑相同時先聲明者優(yōu)先
    在這里插入圖片描述

依賴沖突手動排除

  • 在對依賴沖突默認規(guī)則生效的版本不滿意時候,可以自己選擇手動排除
<dependency><groupId>com.xc</groupId><artifactId>project2</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope><!-- 使用excludes標(biāo)簽配置依賴的排除	--><exclusions><!-- 在exclude標(biāo)簽中配置一個具體的排除 --><exclusion><!-- 指定要排除的依賴的坐標(biāo)(不需要寫version) --><groupId>com.xc</groupId><artifactId>project3</artifactId></exclusion></exclusions>
</dependency>

四、Maven工程構(gòu)建

??項目構(gòu)建是指將源代碼、依賴庫和資源文件等轉(zhuǎn)換成可執(zhí)行或可部署的應(yīng)用程序的過程,在這個過程中包括編譯源代碼、鏈接依賴庫、打包和部署等多個步驟。

在這里插入圖片描述

1、生命周期

??Maven的生命周期(Lifecycle)是構(gòu)建項目的步驟集合,定義了從項目編譯到部署的一系列過程。

下面是Maven生命周期及其階段的表格:

生命周期階段描述
Clean 生命周期pre-clean執(zhí)行清理之前的工作
clean(重點)移除上一次構(gòu)建生成的文件
post-clean執(zhí)行清理之后的工作
Default 生命周期validate驗證項目結(jié)構(gòu)和必要信息
initialize初始化構(gòu)建狀態(tài),例如設(shè)置屬性
generate-sources生成源代碼(如果需要)
process-sources處理源代碼(如代碼增強)
generate-resources生成資源文件
process-resources復(fù)制并處理資源到輸出目錄,準(zhǔn)備打包
compile(重點)編譯項目main目錄下的源代碼
process-classes處理編譯后的類文件
generate-test-sources生成測試源代碼
process-test-sources處理測試源代碼
generate-test-resources生成測試資源
process-test-resources處理測試資源
test-compile編譯測試代碼
test(重點)運行測試代碼
prepare-package打包前的準(zhǔn)備工作
package(重點)將編譯結(jié)果打包(如 JAR、WAR)
pre-integration-test運行集成測試前的準(zhǔn)備工作
integration-test運行集成測試
post-integration-test集成測試后的清理工作
verify驗證項目是否符合標(biāo)準(zhǔn)
install(重點)安裝包到本地倉庫
deploy(重點)將包發(fā)布到遠程倉庫
Site 生命周期pre-site生成站點之前的準(zhǔn)備工作
site生成項目站點文檔
post-site生成站點之后的處理工作
site-deploy發(fā)布生成的站點到服務(wù)器
  • 生命周期獨立:clean、default和site生命周期彼此獨立,執(zhí)行一個生命周期時,不會自動觸發(fā)其他生命周期
  • 階段順序執(zhí)行:在一個生命周期內(nèi),Maven從最初階段開始執(zhí)行,依次運行到你指定的階段。如果指定了一個中間階段,之前的所有階段都會被執(zhí)行,確保構(gòu)建流程的完整性和一致性

2、構(gòu)建命令

??需要在包含pom.xml的項目根目錄執(zhí)行Maven構(gòu)建命令,因為Maven是基于這個文件來讀取構(gòu)建配置、依賴和插件信息的。

命令描述
mvn compile編譯項目,生成target文件
mvn package打包項目,生成jar或war文件
mvn clean清理編譯或打包后的項目結(jié)構(gòu)
mvn install打包后上傳到maven本地倉庫
mvn deploy只打包,上傳到maven私服倉庫
mvn site生成站點
mvn test執(zhí)行測試源碼

2.1、常見組合命令

  • mvn clean install:清理項目后,重新構(gòu)建并將包安裝到本地倉庫
  • mvn clean package:清理項目后,重新生成可分發(fā)的包(如 JAR 或 WAR)

2.2、命令選項

  • -DskipTests:跳過測試,例如:mvn clean install -DskipTests
  • -X:啟用詳細的調(diào)試日志信息,例如:mvn clean install -X
  • -T 1C:使用多線程構(gòu)建,1C表示使用與CPU核數(shù)相同的線程數(shù),例如:mvn clean install -T 1C

3、插件

??Maven插件是執(zhí)行項目構(gòu)建和管理的實際工具。所有的構(gòu)建任務(wù)(例如編譯、測試、打包、部署等)都是由插件來執(zhí)行的。Maven本身是一個框架,它通過插件來調(diào)用具體的功能。

3.1、Maven默認的插件

  • maven-compiler-plugin:用于編譯源代碼。默認Java1.5版本,可以通過配置更改為其他版本

方式一:并設(shè)置source和target版本

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version> <!-- 插件版本 --><configuration><source>1.8</source> <!-- 指定源代碼使用的Java版本 --><target>1.8</target> <!-- 指定生成字節(jié)碼的Java版本 --></configuration>
</plugin>

方式二:使用properties設(shè)置全局Java版本

<!-- properties: 項目屬性,通常用來定義全局變量 -->
<properties><!-- Maven 編譯器的 Java 源代碼版本 --><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>
</properties>
  • maven-surefire-plugin:用于運行單元測試,主要是通過 JUnit 或 TestNG
  • maven-jar-plugin:用于創(chuàng)建jar文件。默認把編譯后的class文件打包為一個jar文件(只是一個標(biāo)準(zhǔn)的庫 JAR,不包含所有的依賴項)
  • maven-install-plugin:用于把生成的工件(JAR、WAR 文件等)安裝到本地Maven倉庫
  • maven-deploy-plugin:用于將工件發(fā)布到遠程倉庫,供其他開發(fā)人員使用
  • maven-site-plugin:用于生成站點文檔,通?;陧椖康腜OM文件信息生成報告和文檔
  • maven-clean-plugin:用于清除項目生成的文件,例如target目錄下的編譯輸出
  • maven-resources-plugin:用于處理項目中的資源文件(如將資源從 src/main/resources 復(fù)制到目標(biāo)目錄)

從idea可視化工具查看maven的默認插件:

在這里插入圖片描述

3.2、生成微服務(wù)可運行jar包

??由以上插件maven-jar-plugin可知,默認情況只能生成依賴jar,而不是微服務(wù)可執(zhí)行的jar,一般使用SpringBoot插件spring-boot-maven-plugin,這個插件負責(zé)打包微服務(wù)為一個可運行的jar包。

<!--    SpringBoot應(yīng)用打包插件-->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
3.2.1、添加spring-boot-maven-plugin插件后的打包流程
  • 第一步:打包生成普通JAR
    • Maven會使用默認打包插件maven-jar-plugin生成一個普通的JAR文件
    • 標(biāo)準(zhǔn)JAR文件,不可執(zhí)行,用于依賴作為庫或被引用
  • 第二步:生成可執(zhí)行JAR
    • 將第一步生成的JAR文件重命名為xxx.jar.original文件
    • repackage命令會將應(yīng)用的所有依賴項(包括嵌入式的 Tomcat、Jetty 或其他服務(wù)器)打包進JAR中,并且指定JAR的入口點(即 Main-Class)
    • 可執(zhí)行的JAR,包含所有依賴和嵌入式服務(wù)器,能夠獨立運行

在這里插入圖片描述

3.2.2、常規(guī)打包方式

pom文件:

...<groupId>com.xc</groupId><artifactId>springboot-mybatis</artifactId><version>1.0-SNAPSHOT</version>
...<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

打包結(jié)果:

在這里插入圖片描述

  • springboot-mybatis-1.0-SNAPSHOT.jar
    • 命名: artifactId + 版本號,用“-”連接
    • 可以使用java -jar xxx直接運行的服務(wù),里面包含依賴的jar
  • springboot-mybatis-1.0-SNAPSHOT.jar.original
    • 去掉后綴.original則是可以被其他項目依賴的jar
3.2.3、進階打包方式

pom文件:

...<groupId>com.xc</groupId><artifactId>springboot-mybatis</artifactId><version>1.0-SNAPSHOT</version>
...<build><finalName>my-mybatis</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier><skip>false</skip></configuration></plugin></plugins></build>

打包結(jié)果:

在這里插入圖片描述

  • my-mybatis.jar:依賴jar,不可執(zhí)行
  • my-mybatis-exec.jar:可執(zhí)行依賴
  • <finalName>標(biāo)簽:設(shè)置打包的名稱,不再使用artifactId + 版本號方式
  • <classifier>標(biāo)簽:設(shè)置可運行服務(wù)jar的后綴
    • 因為可運行jar有了后綴
    • 所有依賴jar就不會重名,也就不用添加后綴.original
  • <skip>標(biāo)簽:mavn執(zhí)行插件選擇是否跳過,默認false,true則不執(zhí)行當(dāng)前插件

3.3、<resources>標(biāo)簽

不寫<resources>標(biāo)簽

  • src/main/java非java文件都不會編譯
    • target當(dāng)中的classes和打出的包解壓BOOT-INF當(dāng)中的classes都找不到
  • src/main/resources下的文件都會被編譯
    • target當(dāng)中的classes和打出的包解壓BOOT-INF當(dāng)中的classes都可以找到

<resources>標(biāo)簽只設(shè)置src/main/java

  • 假如代碼中有xml想加載編譯,添加如下
<build><resources><resource><directory>src/main/java</directory><filtering>true</filtering><includes><include>**/*.xml</include></includes></resource></resources>
</build>
  • <filtering>標(biāo)簽:默認值為false。指定打包時的配置文件其中${}引用會換成直接引用
  • 此時src/main/java中的xml會編譯,但是src/main/resource中的所有資源都沒有加載
  • 可以理解為:
    • 不加<resource>則默認只加載resource文件
    • 添加<resource>則是加哪個路徑,只加載哪個路徑的文件

最終方案

  • 如此,java和resources下需要的資源都會加載
<build><resources><resource><directory>src/main/java</directory><filtering>true</filtering><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>	

Maven生命周期、命令、插件之間的關(guān)系

??Maven的生命周期定義了項目構(gòu)建的步驟,每個階段通過綁定的插件目標(biāo)執(zhí)行具體任務(wù)。命令用于觸發(fā)生命周期的某個階段或直接調(diào)用插件目標(biāo)。三者通過插件綁定階段、命令觸發(fā)生命周期,協(xié)同完成項目的自動化構(gòu)建。

五、Maven繼承和聚合

1、繼承

??Maven工程之間,A工程繼承B工程。本質(zhì)上是A工程的pom.xml中的配置繼承了B工程中pom.xml的配置

1.1、父項目的pom.xml

  • 父項目是作為頂層項目,包含多個子項目的通用配置。父項目的打包類型是pom
  • 使用dependencyManagement標(biāo)簽配置只對依賴的管理,不導(dǎo)入
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version></plugin></plugins></build><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.9</version></dependency></dependencies></dependencyManagement>
</project>

1.2、子項目pom.xml

  • 子項目通過在pom.xml中使用<parent>標(biāo)簽指定父項目,從而繼承父項目的配置
  • 子項目可以繼承父項目的依賴、插件、屬性等,也可以在子項目中覆蓋父項目的配置
  • 如果子工程坐標(biāo)中的groupIdversion與父工程一致,那么可以省略
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0-SNAPSHOT</version><relativePath>../parent-pom.xml</relativePath> <!-- 相對路徑 --></parent><artifactId>child-project</artifactId><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency></dependencies>
</project>
1.2.1、<relativePath>標(biāo)簽
  • <relativePath>標(biāo)簽用于在子項目的pom.xml中指定父項目的相對路徑
  • 如果父項目位于子項目上一級目錄,通常不需要顯式指定<relativePath>,Maven會默認使用../pom.xml
  • 在非標(biāo)準(zhǔn)目錄結(jié)構(gòu)或父項目位于遠程倉庫時,使用<relativePath/>忽略遠程父項目

2、聚合

??Maven聚合是通過在一個主項目的pom.xml文件中使用<modules>標(biāo)簽定義多個子模塊來實現(xiàn)的。聚合項目本身的pom.xml文件不會直接生成可執(zhí)行文件,而是負責(zé)將多個子模塊集中構(gòu)建

聚合項目pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><!-- 列出所有模塊 --><modules><module>module-a</module><module>module-b</module><module>module-c</module></modules>
</project>

??在這個例子中,聚合項目parent-project聚合了三個子模塊module-a、module-b和module-c。通過運行聚合項目的mvn installmvn clean install命令,可以一次性構(gòu)建這三個子模塊。

五、Maven倉庫

1、Maven倉庫

??Maven倉庫(Maven Repository)是用于存儲管理Maven項目構(gòu)建過程中所需的依賴庫插件以及構(gòu)件的存儲庫。

1.1、本地倉庫(Local Repository)

??本地倉庫位于開發(fā)者的本地機器上,存儲Maven構(gòu)建過程中下載的所有依賴和插件。當(dāng)項目構(gòu)建時,Maven 首先會檢查本地倉庫中是否已經(jīng)存在需要的依賴,如果沒有,則會從遠程倉庫或中央倉庫下載。

  • 默認路徑:~/.m2/repository
  • 特性:緩存下載的依賴,減少重復(fù)下載,提高構(gòu)建速度

settings.xml文件修改本地倉庫地址,將中央倉庫地址替換為阿里云Maven倉庫

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>/path/to/your/repo</localRepository><mirrors><mirror><id>aliyun-maven</id><mirrorOf>central</mirrorOf><name>Aliyun Maven Repository</name><url>https://maven.aliyun.com/repository/public</url><layout>default</layout></mirror></mirrors><!-- 其他配置 -->
</settings>

1.2、中央倉庫(Central Repository)

??中央倉庫是Maven官方維護的公共倉庫,存儲了開源項目常用的依賴庫。它是Maven的默認遠程倉庫,當(dāng)本地倉庫中沒有找到某個依賴時,Maven會自動從中央倉庫下載。

  • 中央倉庫地址:https://repo.maven.apache.org/maven2
  • 特性:全球公開訪問,涵蓋了大量開源項目的庫和插件

1.3、遠程倉庫(Remote Repository)

??遠程倉庫是除了中央倉庫,任何其他的遠程倉庫,包括第三方倉庫私有倉庫。

  • 其中,遠程倉庫可以分為兩種子類型:
    • 快照倉庫(Snapshot Repository):用于存儲開發(fā)中的快照版本,支持不斷更新
    • 發(fā)布倉庫(Release Repository):用于存儲穩(wěn)定的已發(fā)布版本,內(nèi)容不會改變

1.4、Maven倉庫的工作原理

  1. 本地倉庫查找:Maven 首先從本地倉庫查找構(gòu)建所需的依賴和插件
  2. 遠程倉庫下載:如果本地倉庫沒有該依賴,Maven 會從配置的遠程倉庫或中央倉庫下載該依賴,并存儲到本地倉庫中
  3. 依賴緩存:一旦依賴下載到本地倉庫,后續(xù)構(gòu)建中無需再次下載,除非依賴的版本發(fā)生變化(如 SNAPSHOT版本)
  4. 發(fā)布到倉庫:開發(fā)人員可以將構(gòu)件(如打包的JAR文件)發(fā)布到遠程倉庫(如企業(yè)私有倉庫),供其他團隊成員或項目共享使用

2、Maven私服

??Maven私服是一種特殊的Maven遠程倉庫,它是架設(shè)在局域網(wǎng)內(nèi)的倉庫服務(wù),用來代理位于外部的遠程倉庫(中央倉庫、其他遠程公共倉庫)。

在這里插入圖片描述

以下是搭建 Maven 私服常用的工具:

  • Nexus Repository Manager:由Sonatype提供的開源倉庫管理器(當(dāng)前最流行、使用最廣泛)
  • Artifactory:Jfrog提供的倉庫管理工具,支持多種格式的包管理(包括 Maven)
  • Apache Archiva:Apache提供的開源工具,專注于Maven倉庫管理

2.1、Nexus倉庫

在這里插入圖片描述

倉庫類型說明
proxy代理倉庫:用于從遠程存儲庫獲取組件
group組倉庫:它將多個倉庫聚合為一個訪問入口,可以一并訪問多個底層倉庫
hosted托管倉庫:用于存儲由內(nèi)部開發(fā)者創(chuàng)建的jar包
  • maven-central:代理了遠程的Maven中央倉庫,構(gòu)建項目時會從該倉庫下載依賴

在這里插入圖片描述

  • maven-public:一個組倉庫,聚合了多個倉庫的內(nèi)容
    • 它將多個倉庫整合成一個統(tǒng)一的入口,便于開發(fā)者訪問
    • 在這個組中,通常包含maven-releases、maven-snapshotsmaven-central等倉庫
    • 那么只需要配置一個maven-public倉庫,就能同時訪問這些托管的和代理的倉庫

在這里插入圖片描述

  • maven-releases:專門用于存儲發(fā)布的版本(release versions)的構(gòu)件
    • 當(dāng)一個項目發(fā)布了穩(wěn)定的版本(非SNAPSHOT),可以將這些構(gòu)件發(fā)布到maven-releases倉庫中
    • 其他團隊成員或相關(guān)項目可以直接從這個倉庫下載發(fā)布的版本
  • maven-snapshots:專門用于存儲開發(fā)中的SNAPSHOT版本的構(gòu)件
    • SNAPSHOT版本代表開發(fā)中的構(gòu)件,它們可能會頻繁更新,不像release版本那樣穩(wěn)定
    • 每次構(gòu)建的SNAPSHOT版本都會覆蓋先前版本,而不是生成新的版本號

2.2、通過Nexus下載jar包

  • 修改settings.xml
<mirrors><mirror><id>nexus-mirror</id> <!-- 這是鏡像倉庫的唯一標(biāo)識符,不用于認證 --><mirrorOf>central</mirrorOf> <!-- 重定向中央倉庫的請求 --><url>http://your-nexus-repo-url/repository/maven-public/</url></mirror>
</mirrors><servers><server><id>nexus-mirror</id> <!-- 如果上面?zhèn)}庫需要認證,這個ID必須與上面id一致 --><username>your-username</username><password>your-password</password></server>
</servers>
  • url標(biāo)簽的來源

在這里插入圖片描述

  • 本地倉庫下載完包以后,nexus的組倉庫maven-public就能看見jar包了

在這里插入圖片描述

  • 若下載速度太慢,可以設(shè)置私服中中央倉庫的地址為阿里云倉庫地址

在這里插入圖片描述
在這里插入圖片描述

2.3、將jar包部署到Nexus

步驟 1:在pom.xml中配置發(fā)布倉庫

  • 一個用于發(fā)布正式的release版本,另一個用于發(fā)布snapshot(快照)版本
<distributionManagement><repository><id>nexus-releases</id> <!-- 正式發(fā)布倉庫的 ID --><url>http://your-nexus-repo-url/repository/maven-releases/</url> <!-- Nexus Releases 倉庫的 URL --></repository><snapshotRepository><id>nexus-snapshots</id> <!-- 快照倉庫的 ID --><url>http://your-nexus-repo-url/repository/maven-snapshots/</url> <!-- Nexus Snapshots 倉庫的 URL --></snapshotRepository>
</distributionManagement>

步驟 2:在 settings.xml 中配置認證信息

  • distributionManagement中的倉庫id添加相應(yīng)的認證信息
<servers><server><id>nexus-releases</id> <!-- 對應(yīng) pom.xml 中的 repository ID --><username>your-username</username><password>your-password</password></server><server><id>nexus-snapshots</id> <!-- 對應(yīng) pom.xml 中的 snapshotRepository ID --><username>your-username</username><password>your-password</password></server>
</servers>
  • 上傳成功

在這里插入圖片描述

3、repositories和mirrors

3.1、repositories(倉庫)

??repositories 是Maven用于查找和下載項目依賴的遠程或本地存儲庫。Maven在構(gòu)建項目時,會從這些倉庫中查找所需的依賴(如 JAR 包)并下載到本地存儲庫。

主要功能

  • 定義Maven用來查找項目依賴的存儲庫位置
  • 可以在pom.xml中為每個項目單獨配置,也可以在settings.xml中全局配置

示例

pom.xml 中定義倉庫:

<repositories><repository><id>company-repo</id> <!-- 倉庫的唯一 ID,用于認證等 --><url>http://your-company-repo-url/repository/maven-releases/</url> <!-- 倉庫 URL --><releases><enabled>true</enabled> <!-- 指定是否用于發(fā)布版本 --></releases><snapshots><enabled>false</enabled> <!-- 指定是否用于快照版本 --></snapshots></repository>
</repositories>

3.2、mirrors(鏡像)

??mirrors 用于對某個特定倉庫(如Maven中央倉庫)的請求重定向到另一個倉庫(如公司內(nèi)部的Nexus倉庫)。它的主要作用是將對中央倉庫、快照倉庫等的請求重定向到另一個地方。

主要功能

  • 當(dāng)Maven請求中央倉庫時,它會自動將請求轉(zhuǎn)發(fā)到定義的鏡像倉庫,而不需要手動配置每個項目的repositories
  • 配置在settings.xml中(而不是 pom.xml),適用于全局配置

示例

settings.xml 中定義鏡像:

<mirrors><mirror><id>nexus-mirror</id> <!-- 鏡像倉庫的唯一標(biāo)識符 --><mirrorOf>central</mirrorOf> <!-- 指定要鏡像的倉庫,如 Maven 中央倉庫 --><url>http://your-company-repo-url/repository/maven-public/</url> <!-- 鏡像倉庫的 URL --></mirror>
</mirrors>
  • id:為鏡像指定的唯一標(biāo)識符。它可以是任意值,用于區(qū)分不同的鏡像配置
  • mirrorOf:定義要鏡像的倉庫。常見的值包括:
    • central:表示Maven中央倉庫
    • *:表示鏡像所有倉庫
    • repo1,repo2:表示鏡像多個指定的倉庫
    • !central:表示鏡像所有倉庫,除了中央倉庫
  • url:鏡像倉庫的實際URL,Maven將通過這個URL下載依賴
http://www.risenshineclean.com/news/12082.html

相關(guān)文章:

  • 自己的網(wǎng)站做彈出廣告app推廣方式有哪些
  • 網(wǎng)站及網(wǎng)頁設(shè)計費用市場營銷策劃公司排名
  • 河南的網(wǎng)絡(luò)推廣公司專業(yè)黑帽seo推廣
  • 越秀區(qū)網(wǎng)站建設(shè)寧波seo搜索引擎優(yōu)化公司
  • 電商網(wǎng)站技術(shù)方案阿里指數(shù)官網(wǎng)最新版本
  • wordpress邊下邊看seo權(quán)重優(yōu)化軟件
  • 網(wǎng)站里面如何做下載的app全國31省市疫情最新消息今天
  • html電子商務(wù)網(wǎng)站模板百度信息流推廣教程
  • 網(wǎng)站做支付功能培訓(xùn)計劃和培訓(xùn)內(nèi)容
  • 用自己的電腦做網(wǎng)站需要備案嗎旅游最新資訊
  • 網(wǎng)站建設(shè)jutuibao線上推廣的渠道和方法
  • 媒體公司網(wǎng)站模板百度指數(shù)1000搜索量有多少
  • 怎么做網(wǎng)站像淘寶這樣的免費發(fā)布產(chǎn)品信息的網(wǎng)站
  • 廣州的一起做網(wǎng)站網(wǎng)絡(luò)軟文廣告
  • 幫客戶做網(wǎng)站內(nèi)容網(wǎng)頁關(guān)鍵詞排名優(yōu)化
  • 免費自助建站系統(tǒng)平臺 貼吧網(wǎng)站分析工具
  • 廣州網(wǎng)站設(shè)計我選刻在線識別圖片來源
  • 自貢做網(wǎng)站的公司百度官網(wǎng)認證申請
  • 有沒有專門做航拍婚禮網(wǎng)站公司網(wǎng)站建設(shè)公司
  • 現(xiàn)在個人做網(wǎng)站還能盈利營銷策略有哪些方法
  • 出國越南做網(wǎng)站8000保底seo是什么專業(yè)的課程
  • 保定網(wǎng)站 優(yōu)百度關(guān)鍵詞模擬點擊軟件
  • 查詢系統(tǒng)網(wǎng)站模板電商網(wǎng)站鏈接買賣
  • 獨立商城系統(tǒng)網(wǎng)站建設(shè)站長工具ping檢測
  • 重慶網(wǎng)站產(chǎn)品推廣汕頭網(wǎng)站制作設(shè)計
  • 怎么用自己電腦做服務(wù)器搭建網(wǎng)站深圳龍華區(qū)大浪社區(qū)
  • 網(wǎng)站注冊人查詢某個產(chǎn)品營銷推廣方案
  • 保險官方網(wǎng)站如何進行品牌營銷
  • 聽完米課做的網(wǎng)站網(wǎng)絡(luò)營銷公司好不好
  • 買了域名怎么用免費seo教程