国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 )

這篇具有很好參考價(jià)值的文章主要介紹了【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 )。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


Maven是什么?

Maven 文檔
Maven 是一款為 Java 項(xiàng)目構(gòu)建管理、依賴(lài)管理的工具(軟件),使用 Maven 可以自動(dòng)化構(gòu)建、測(cè)試、打包和發(fā)布項(xiàng)目,大大提高了開(kāi)發(fā)效率和質(zhì)量。

依賴(lài)管理工具


一、Maven安裝和配置

maven下載版本

使用:apache-maven-3.6.3
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

  1. 軟件結(jié)構(gòu):
    【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
  2. 環(huán)境變量 命令行顯示版本

mvn -v
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
設(shè)置:
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

MAVEN_HOME
D:\Environment\apache-maven-3.6.3

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

%MAVEN_HOME%\bin

本地配置文件設(shè)置

  1. maven/conf/settings.xml配置文件
    依賴(lài)本地緩存位置(本地倉(cāng)庫(kù)位置)55行左右
    【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
  2. 配置國(guó)內(nèi)阿里鏡像
    【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
<!--在mirrors節(jié)點(diǎn)(標(biāo)簽)下添加中央倉(cāng)庫(kù)鏡像 160行附近-->
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
  1. 配置jdk17版本項(xiàng)目構(gòu)建
    【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
<!--在profiles節(jié)點(diǎn)(標(biāo)簽)下添加jdk編譯版本 268行附近-->
<profile>
    <id>jdk-17</id>
    <activation>
      <activeByDefault>true</activeByDefault>
      <jdk>17</jdk>
    </activation>
    <properties>
      <maven.compiler.source>17</maven.compiler.source>
      <maven.compiler.target>17</maven.compiler.target>
      <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
    </properties>
</profile>

idea配置本地maven

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

二、基于IDEA的Maven工程創(chuàng)建

2.1 Maven工程GAVP屬性

Maven工程相對(duì)之前的工程,多出一組gavp屬性,gav需要我們?cè)趧?chuàng)建項(xiàng)目的時(shí)指定,p有默認(rèn)值,后期通過(guò)配置文件修改。
Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四個(gè)屬性的縮寫(xiě),其中前三個(gè)是必要的,而 Packaging 屬性為可選項(xiàng)。

GAV遵循一下規(guī)則:

1) GroupID 格式:com.{公司/BU }.業(yè)務(wù)線(xiàn).[子業(yè)務(wù)線(xiàn)],最多 4 級(jí)。

說(shuō)明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一級(jí);子業(yè)務(wù)線(xiàn)可選。

正例:com.taobao.tddl 或 com.alibaba.sourcing.multilang com.atguigu.java

2) ArtifactID 格式:產(chǎn)品線(xiàn)名-模塊名。語(yǔ)義不重復(fù)不遺漏,先到倉(cāng)庫(kù)中心去查證一下。

正例:tc-client / uic-api / tair-tool / bookstore

3) Version版本號(hào)格式推薦:主版本號(hào).次版本號(hào).修訂號(hào) 1.0.0

1) 主版本號(hào):當(dāng)做了不兼容的 API 修改,或者增加了能改變產(chǎn)品方向的新功能。

2) 次版本號(hào):當(dāng)做了向下兼容的功能性新增(新增類(lèi)、接口等)。

3) 修訂號(hào):修復(fù) bug,沒(méi)有修改方法簽名的功能加強(qiáng),保持 API 兼容性。

例如: 初始→1.0.0 修改bug → 1.0.1 功能調(diào)整 → 1.1.1等

Packaging定義規(guī)則:

指示將項(xiàng)目打包為什么類(lèi)型的文件,idea根據(jù)packaging值,識(shí)別maven項(xiàng)目類(lèi)型!

packaging 屬性為 jar(默認(rèn)值),代表普通的Java工程,打包以后是.jar結(jié)尾的文件。

packaging 屬性為 war,代表Java的web工程,打包以后.war結(jié)尾的文件。

packaging 屬性為 pom,代表不會(huì)打包,用來(lái)做繼承的父工程。

2.2 Idea構(gòu)建Maven JavaEE工程

注意:此處省略了version,直接給了一個(gè)默認(rèn)值<version>1.0-SNAPSHOT</version>

  • 安裝插件JBLJavaToWeb
  • 模塊 右鍵 【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
    出現(xiàn)這個(gè) 構(gòu)建完成
    【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

三、Maven工程項(xiàng)目結(jié)構(gòu)說(shuō)明

|-- pom.xml                               # Maven 項(xiàng)目管理文件 
|-- src
    |-- main                              # 項(xiàng)目主要代碼
    |   |-- java                          # Java 源代碼目錄
    |   |   `-- com/example/myapp         # 開(kāi)發(fā)者代碼主目錄
    |   |       |-- controller            # 存放 Controller 層代碼的目錄
    |   |       |-- service               # 存放 Service 層代碼的目錄
    |   |       |-- dao                   # 存放 DAO 層代碼的目錄
    |   |       `-- model                 # 存放數(shù)據(jù)模型的目錄
    |   |-- resources                     # 資源目錄,存放配置文件、靜態(tài)資源等
    |   |   |-- log4j.properties          # 日志配置文件
    |   |   |-- spring-mybatis.xml        # Spring Mybatis 配置文件
    |   |   `-- static                    # 存放靜態(tài)資源的目錄
    |   |       |-- css                   # 存放 CSS 文件的目錄
    |   |       |-- js                    # 存放 JavaScript 文件的目錄
    |   |       `-- images                # 存放圖片資源的目錄
    |   `-- webapp                        # 存放 WEB 相關(guān)配置和資源
    |       |-- WEB-INF                   # 存放 WEB 應(yīng)用配置文件
    |       |   |-- web.xml               # Web 應(yīng)用的部署描述文件
    |       |   `-- classes               # 存放編譯后的 class 文件
    |       `-- index.html                # Web 應(yīng)用入口頁(yè)面
    `-- test                              # 項(xiàng)目測(cè)試代碼
        |-- java                          # 單元測(cè)試目錄
        `-- resources                     # 測(cè)試資源目錄
  • pom.xml:Maven 項(xiàng)目管理文件,用于描述項(xiàng)目的依賴(lài)和構(gòu)建配置等信息。
  • src/main/java:存放項(xiàng)目的 Java 源代碼。
  • src/main/resources:存放項(xiàng)目的資源文件,如配置文件、靜態(tài)資源等。
  • src/main/webapp/WEB-INF:存放 Web 應(yīng)用的配置文件。
  • src/main/webapp/index.html:Web 應(yīng)用的入口頁(yè)面。
  • src/test/java:存放項(xiàng)目的測(cè)試代碼。
  • src/test/resources:存放測(cè)試相關(guān)的資源文件,如測(cè)試配置文件等。

四、Maven核心功能依賴(lài)和構(gòu)建管理

4.1 依賴(lài)管理和配置

  • 通過(guò)定義 POM 文件,Maven 能夠自動(dòng)解析項(xiàng)目的依賴(lài)關(guān)系,
  • 并通過(guò) Maven 倉(cāng)庫(kù)自動(dòng)下載和管理依賴(lài),
  • 從而避免了手動(dòng)下載和管理依賴(lài)的繁瑣工作和可能引發(fā)的版本沖突問(wèn)題。

編寫(xiě)pom.xml文件

  • maven項(xiàng)目信息屬性配置和讀?。?/li>
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成, 如com.companyname.project-group,maven會(huì)將該項(xiàng)目打成的jar包放本地路徑:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來(lái)區(qū)分的 -->
<artifactId>project</artifactId>
<!-- 版本號(hào) -->
<version>1.0.0</version>

<!--打包方式
    默認(rèn):jar
    jar指的是普通的java項(xiàng)目打包方式! 項(xiàng)目打成jar包!
    war指的是web項(xiàng)目打包方式!項(xiàng)目打成war包!
    pom不會(huì)講項(xiàng)目打包!這個(gè)項(xiàng)目作為父工程,被其他工程聚合或者繼承!后面會(huì)講解兩個(gè)概念
-->
<packaging>jar/pom/war</packaging>
  • 依賴(lài)管理和添加:
    • maven倉(cāng)庫(kù)信息官網(wǎng)
    • idea 插件:maven-search
      • 使用【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
<!-- 
   通過(guò)編寫(xiě)依賴(lài)jar包的gav必要屬性,引入第三方依賴(lài)!
   scope屬性是可選的,可以指定依賴(lài)生效范圍!
   依賴(lài)信息查詢(xún)方式:
      1. maven倉(cāng)庫(kù)信息官網(wǎng) https://mvnrepository.com/
      2. mavensearch插件搜索
 -->
<dependencies>
    <!-- 引入具體的依賴(lài)包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <!--
            生效范圍
            - compile :main目錄 test目錄  打包打包 [默認(rèn)]
            - provided:main目錄 test目錄  Servlet
            - runtime: 打包運(yùn)行           MySQL
            - test:    test目錄           junit
         -->
        <scope>runtime</scope>
    </dependency>
</dependencies>
  • 依賴(lài)版本提取和維護(hù):
<!--聲明版本-->
<properties>
  <!--命名隨便,內(nèi)部制定版本號(hào)即可!-->
  <junit.version>4.11</junit.version>
  <!-- 也可以通過(guò) maven規(guī)定的固定的key,配置maven的參數(shù)!如下配置編碼格式!-->
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <!--引用properties聲明版本 -->
    <version>${junit.version}</version>
  </dependency>
</dependencies>

4.2 依賴(lài)傳遞和沖突

  1. 減少重復(fù)依賴(lài):當(dāng)多個(gè)項(xiàng)目依賴(lài)同一個(gè)庫(kù)時(shí),Maven 可以自動(dòng)下載并且只下載一次該庫(kù)。這樣可以減少項(xiàng)目的構(gòu)建時(shí)間和磁盤(pán)空間。
  2. 自動(dòng)管理依賴(lài): Maven 可以自動(dòng)管理依賴(lài)項(xiàng),使用依賴(lài)傳遞,簡(jiǎn)化了依賴(lài)項(xiàng)的管理,使項(xiàng)目構(gòu)建更加可靠和一致。
  3. 確保依賴(lài)版本正確性:通過(guò)依賴(lài)傳遞的依賴(lài),之間都不會(huì)存在版本兼容性問(wèn)題,確實(shí)依賴(lài)的版本正確性!

依賴(lài)傳遞 : 導(dǎo)入依賴(lài),會(huì)自動(dòng)導(dǎo)入依賴(lài)的依賴(lài)(compile dependenices)
簡(jiǎn)化依賴(lài)的導(dǎo)入 確保依賴(lài)的版本無(wú)沖突

依賴(lài)沖突: 發(fā)現(xiàn)已存在依賴(lài)(重復(fù)依賴(lài))會(huì)終止依賴(lài)傳遞!避免循環(huán)依賴(lài)和重復(fù)依賴(lài)的問(wèn)題!

依賴(lài)沖突的發(fā)生場(chǎng)景:重復(fù)依賴(lài)!
解決原則:

  1. 引用路徑長(zhǎng)度 更短
  2. 在上面的優(yōu)先 dependencies聲明的先后順序

4.3 依賴(lài)導(dǎo)入失敗場(chǎng)景和解決方案

可能會(huì)發(fā)生依賴(lài)項(xiàng)下載錯(cuò)誤的情況,主要原因有以下幾種:

  1. 下載依賴(lài)時(shí)出現(xiàn)網(wǎng)絡(luò)故障或倉(cāng)庫(kù)服務(wù)器宕機(jī)等原因,導(dǎo)致無(wú)法連接至 Maven 倉(cāng)庫(kù),從而無(wú)法下載依賴(lài)。
  2. 依賴(lài)項(xiàng)的版本號(hào)或配置文件中的版本號(hào)錯(cuò)誤,或者依賴(lài)項(xiàng)沒(méi)有正確定義,導(dǎo)致 Maven 下載的依賴(lài)項(xiàng)與實(shí)際需要的不一致,從而引發(fā)錯(cuò)誤。
  3. 本地 Maven 倉(cāng)庫(kù)或緩存被污染或損壞,導(dǎo)致 Maven 無(wú)法正確地使用現(xiàn)有的依賴(lài)項(xiàng),并且也無(wú)法重新下載!

解決方案:

  1. 檢查網(wǎng)絡(luò)連接和 Maven 倉(cāng)庫(kù)服務(wù)器狀態(tài)。
  2. 確保依賴(lài)項(xiàng)的版本號(hào)與項(xiàng)目對(duì)應(yīng)的版本號(hào)匹配,并檢查 POM 文件中的依賴(lài)項(xiàng)是否正確。
  3. 清除本地 Maven 倉(cāng)庫(kù)緩存(lastUpdated 文件),因?yàn)橹灰嬖趌astupdated緩存文件,刷新也不會(huì)重新下載。本地倉(cāng)庫(kù)中,根據(jù)依賴(lài)的gav屬性依次向下查找文件夾,最終刪除內(nèi)部的文件,刷新重新下載即可!

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

@echo off
rem 這里寫(xiě)你的倉(cāng)庫(kù)路徑
set REPOSITORY_PATH=D:\Environment\openrepository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完畢
pause

使用記事本打開(kāi)
set REPOSITORY_PATH=D:\repository 改成你本地倉(cāng)庫(kù)地址即可!
點(diǎn)擊運(yùn)行腳本,即可自動(dòng)清理本地錯(cuò)誤緩存文件??!

4.4 擴(kuò)展構(gòu)建管理和插件配置

項(xiàng)目構(gòu)建是指將源代碼、依賴(lài)庫(kù)和資源文件等轉(zhuǎn)換成可執(zhí)行或可部署的應(yīng)用程序的過(guò)程,在這個(gè)過(guò)程中包括編譯源代碼、鏈接依賴(lài)庫(kù)、打包和部署等多個(gè)步驟。
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

主動(dòng)觸發(fā)場(chǎng)景:

  • 重新編譯 : 編譯不充分, 部分文件沒(méi)有被編譯!
  • 打包 : 獨(dú)立部署到外部服務(wù)器軟件,打包部署
  • 部署本地或者私服倉(cāng)庫(kù) : maven工程加入到本地或者私服倉(cāng)庫(kù),供其他工程使用
    命令方式構(gòu)建:

語(yǔ)法: mvn 構(gòu)建命令 構(gòu)建命令…

命令 描述
mvn clean 清理編譯或打包后的項(xiàng)目結(jié)構(gòu),刪除target文件夾
mvn compile 編譯項(xiàng)目,生成target文件
mvn test 執(zhí)行測(cè)試源碼 (測(cè)試)
mvn site 生成一個(gè)項(xiàng)目依賴(lài)信息的展示頁(yè)面
mvn package 打包項(xiàng)目,生成war / jar 文件
mvn install 打包后上傳到maven本地倉(cāng)庫(kù)(本地部署)
mvn deploy 只打包,上傳到maven私服倉(cāng)庫(kù)(私服部署)

可視化方式構(gòu)建:
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
構(gòu)建命令周期:

構(gòu)建生命周期可以理解成是一組固定構(gòu)建命令的有序集合,觸發(fā)周期后的命令,會(huì)自動(dòng)觸發(fā)周期前的命令!也是一種簡(jiǎn)化構(gòu)建的思路!

  • 清理周期:主要是對(duì)項(xiàng)目編譯生成文件進(jìn)行清理

    包含命令:clean

  • 默認(rèn)周期:定義了真正構(gòu)件時(shí)所需要執(zhí)行的所有步驟,它是生命周期中最核心的部分

    包含命令:compile - test - package - install / deploy

  • 報(bào)告周期

    包含命令:site

    打包: mvn clean package 本地倉(cāng)庫(kù): mvn clean install

最佳使用方案:

打包: mvn clean package
重新編譯: mvn clean compile
本地部署: mvn clean install 

周期,命令和插件:

周期→包含若干命令→包含若干插件!

使用周期命令構(gòu)建,簡(jiǎn)化構(gòu)建過(guò)程!

最終進(jìn)行構(gòu)建的是插件!

插件配置:

<build>
   <!-- jdk17 和 war包版本插件不匹配 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>

五、Maven繼承和聚合特性

5.1 Maven工程繼承關(guān)系

Maven 繼承是指在 Maven 的項(xiàng)目中,讓一個(gè)項(xiàng)目從另一個(gè)項(xiàng)目中繼承配置信息的機(jī)制。
多個(gè)項(xiàng)目中共享同一配置信息,簡(jiǎn)化項(xiàng)目的管理和維護(hù)工作。
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java作用:在父工程中統(tǒng)一管理項(xiàng)目中的依賴(lài)信息,進(jìn)行統(tǒng)一版本管理!

背景:

  • 對(duì)一個(gè)比較大型的項(xiàng)目進(jìn)行了模塊拆分。
  • 一個(gè) project 下面,創(chuàng)建了很多個(gè) module。
  • 每一個(gè) module 都需要配置自己的依賴(lài)信息。

需求:

  • 多個(gè)模塊要使用同一個(gè)框架,它們應(yīng)該是同一個(gè)版本,所以整個(gè)項(xiàng)目中使用的框架版本需要統(tǒng)一管理。
  • 使用框架時(shí)所需要的 jar 包組合(或者說(shuō)依賴(lài)信息組合)需要經(jīng)過(guò)長(zhǎng)期摸索和反復(fù)調(diào)試,最終確定一個(gè)可用組合。這個(gè)耗費(fèi)很大精力總結(jié)出來(lái)的方案不應(yīng)該在新的項(xiàng)目中重新摸索。
    通過(guò)在父工程中為整個(gè)項(xiàng)目維護(hù)依賴(lài)信息的組合既保證了整個(gè)項(xiàng)目使用規(guī)范、準(zhǔn)確的 jar 包;又能夠?qū)⒁酝慕?jīng)驗(yàn)沉淀下來(lái),節(jié)約時(shí)間和精力。

繼承語(yǔ)法:

  • 父工程:
<groupId>com.doug.maven</groupId>
<artifactId>pro03-maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 當(dāng)前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom -->
<packaging>pom</packaging>
  • 子工程:
<!-- 使用parent標(biāo)簽指定當(dāng)前工程的父工程 -->
<parent>
  <!-- 父工程的坐標(biāo) -->
  <groupId>com.doug.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

<!-- 子工程的坐標(biāo) -->
<!-- 如果子工程坐標(biāo)中的groupId和version與父工程一致,那么可以省略 -->
<!-- <groupId>com.doug.maven</groupId> -->
<artifactId>pro04-maven-module</artifactId>
<!-- <version>1.0-SNAPSHOT</version> -->

父工程依賴(lài)統(tǒng)一管理:

  • 父工程聲明版本
<!-- 使用dependencyManagement標(biāo)簽配置對(duì)依賴(lài)的管理 -->
<!-- 被管理的依賴(lài)并沒(méi)有真正被引入到工程 -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
  </dependencies>
</dependencyManagement>
  • 子工程引用版本
<!-- 子工程引用父工程中的依賴(lài)信息時(shí),可以把版本號(hào)去掉。  -->
<!-- 把版本號(hào)去掉就表示子工程中這個(gè)依賴(lài)的版本由父工程決定。 -->
<!-- 具體來(lái)說(shuō)是由父工程的dependencyManagement來(lái)決定。 -->
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
  </dependency>
</dependencies>

5.2 Maven工程聚合關(guān)系

Maven 聚合是指將多個(gè)項(xiàng)目組織到一個(gè)父級(jí)項(xiàng)目中,通過(guò)觸發(fā)父工程的構(gòu)建,統(tǒng)一按順序觸發(fā)子工程構(gòu)建的過(guò)程!

  1. 統(tǒng)一管理子項(xiàng)目構(gòu)建:通過(guò)聚合,可以將多個(gè)子項(xiàng)目組織在一起,方便管理和維護(hù)。
  2. 優(yōu)化構(gòu)建順序:通過(guò)聚合,可以對(duì)多個(gè)項(xiàng)目進(jìn)行順序控制,避免出現(xiàn)構(gòu)建依賴(lài)混亂導(dǎo)致構(gòu)建失敗的情況。

聚合語(yǔ)法:
父項(xiàng)目中包含的子項(xiàng)目列表。

<project>
  <groupId>com.example</groupId>
  <artifactId>parent-project</artifactId>
  <packaging>pom</packaging>
  <version>1.0.0</version>
  <modules>
    <module>child-project1</module>
    <module>child-project2</module>
  </modules>
</project>

通過(guò)觸發(fā)父工程構(gòu)建命令、引發(fā)所有子模塊構(gòu)建!產(chǎn)生反應(yīng)堆!
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

六、Maven實(shí)戰(zhàn)案例:搭建微服務(wù)Maven工程架構(gòu)

6.1 項(xiàng)目需求和結(jié)構(gòu)分析

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
需求案例:搭建一個(gè)電商平臺(tái)項(xiàng)目,該平臺(tái)包括用戶(hù)服務(wù)、訂單服務(wù)、通用工具模塊等。

項(xiàng)目架構(gòu):

  1. 用戶(hù)服務(wù):負(fù)責(zé)處理用戶(hù)相關(guān)的邏輯,例如用戶(hù)信息的管理、用戶(hù)注冊(cè)、登錄等。
  2. 訂單服務(wù):負(fù)責(zé)處理訂單相關(guān)的邏輯,例如訂單的創(chuàng)建、訂單支付、退貨、訂單查看等。
  3. 通用模塊:負(fù)責(zé)存儲(chǔ)其他服務(wù)需要通用工具類(lèi),其他服務(wù)依賴(lài)此模塊。

服務(wù)依賴(lài):

  1. 用戶(hù)服務(wù) (1.0.1)
    • spring-context 6.0.6
    • spring-core 6.0.6
    • spring-beans 6.0.6
    • jackson-databind / jackson-core / jackson-annotations 2.15.0
  2. 訂單服務(wù) (1.0.1)
    1. shiro-core 1.10.1
    2. spring-context 6.0.6
    3. spring-core 6.0.6
    4. spring-beans 6.0.6
  3. 通用模塊 (1.0.1)
    1. commons-io 2.11.0

6.2 項(xiàng)目搭建和統(tǒng)一構(gòu)建

父模塊搭建 (micro-shop)

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

  • 父模塊 pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<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.doug</groupId>
    <artifactId>micro-shop</artifactId>
    <version>1.0.1</version>
    <modules>
        <module>user-service</module>
    </modules>
    <!-- 父工程不打包,所以選擇pom值-->
    <packaging>pom</packaging>

    <properties>
        <spring.version>6.0.6</spring.version>
        <jackson.version>2.15.0</jackson.version>
        <shiro.version>1.10.1</shiro.version>
        <commons.version>2.11.0</commons.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 依賴(lài)管理 -->
    <dependencyManagement>
        <dependencies>
            <!-- spring-context會(huì)依賴(lài)傳遞core/beans -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <!-- jackson-databind會(huì)依賴(lài)傳遞core/annotations -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!-- shiro-core -->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <!-- commons-io -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons.version}</version>
            </dependency>

        </dependencies>

    </dependencyManagement>

    <dependencies>
        <!-- 父工程添加依賴(lài),會(huì)自動(dòng)傳遞給所有子工程,不推薦! -->
    </dependencies>

    <!-- 統(tǒng)一更新子工程打包插件-->
    <build>
        <!-- jdk17 和 war包版本插件不匹配 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
            </plugin>
        </plugins>
    </build>
</project>

刪除src 只留pom

子模塊搭建 (user-service)

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
轉(zhuǎn)為web:
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
pom設(shè)置:

<?xml version="1.0" encoding="UTF-8"?>

<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">  
  <parent> 
    <artifactId>micro-shop</artifactId>  
    <groupId>com.doug</groupId>  
    <version>1.0.1</version> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <artifactId>user-service</artifactId>  
  <packaging>war</packaging>
  <properties> 
    <maven.compiler.source>17</maven.compiler.source>  
    <maven.compiler.target>17</maven.compiler.target>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  </properties>
  <dependencies>
    <!-- 添加spring-context 自動(dòng)傳遞 core / beans -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <!-- 添加jackson-databind 自動(dòng)傳遞 core / annotations -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>
  </dependencies>
</project>

  • 子模塊 訂單模塊 (order-service)
    pom :
<?xml version="1.0" encoding="UTF-8"?>

<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">  
  <parent> 
    <artifactId>micro-shop</artifactId>  
    <groupId>com.doug</groupId>  
    <version>1.0.1</version> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <artifactId>order-service</artifactId>  
  <packaging>war</packaging>
  <properties> 
    <maven.compiler.source>17</maven.compiler.source>  
    <maven.compiler.target>17</maven.compiler.target>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  </properties>
  <dependencies>
    <!-- 繼承父工程依賴(lài)版本 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <!-- 繼承父工程依賴(lài)版本 -->
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
    </dependency>
  </dependencies>
</project>

  • 子模塊 通用模塊 (common-service)
<?xml version="1.0" encoding="UTF-8"?>

<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">  
  <parent> 
    <artifactId>micro-shop</artifactId>  
    <groupId>com.doug</groupId>  
    <version>1.0.1</version> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <artifactId>common-service</artifactId>
  <!-- 打包方式默認(rèn)就是jar! -->
  <packaging>jar</packaging>
  <properties> 
    <maven.compiler.source>17</maven.compiler.source>  
    <maven.compiler.target>17</maven.compiler.target>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  </properties>
  <dependencies>
    <!-- 聲明commons-io,繼承父工程版本 -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>
  </dependencies>
</project>

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

項(xiàng)目下 模塊的依賴(lài)

install 需要的依賴(lài)模塊 -> common-service
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

需要引用當(dāng)前項(xiàng)目 下的 模塊作為依賴(lài) 就得導(dǎo)出模塊為jar , 再由要導(dǎo)入依賴(lài)的模塊添加dependency

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java

另外兩個(gè)模塊的pom添加模塊依賴(lài):

    <dependency>
      <groupId>com.doug</groupId>
      <artifactId>common-service</artifactId>
    </dependency>

【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java


總結(jié)

核心點(diǎn) 掌握目標(biāo)
安裝 maven安裝、環(huán)境變量、maven配置文件修改
工程創(chuàng)建 gavp屬性理解、JavaSE/EE工程創(chuàng)建、項(xiàng)目結(jié)構(gòu)
依賴(lài)管理 依賴(lài)添加、依賴(lài)傳遞、版本提取、導(dǎo)入依賴(lài)錯(cuò)誤解決
構(gòu)建管理 構(gòu)建過(guò)程、構(gòu)建場(chǎng)景、構(gòu)建周期等
繼承和聚合 理解繼承和聚合作用、繼承語(yǔ)法和實(shí)踐、聚合語(yǔ)法和實(shí)踐

構(gòu)建周期:
【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 ),后端,# JavaWeb,maven,學(xué)習(xí),java
shangguigu-SSM-筆記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-832784.html

到了這里,關(guān)于【Maven】依賴(lài)、構(gòu)建管理 繼承與聚合 快速學(xué)習(xí)(3.6.3 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Maven(六):Maven的使用——繼承與聚合

    Maven(六):Maven的使用——繼承與聚合

    本博主將用CSDN記錄軟件開(kāi)發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識(shí),有興趣的小伙伴可以關(guān)注博主!也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)! Maven 工程之間, A 工程繼承 B 工程 B 工程:父工程 A 工程:子工程 本質(zhì)上是 A 工程的 pom.xml 中的配

    2024年02月06日
    瀏覽(15)
  • Maven工程繼承和聚合關(guān)系

    Maven工程繼承和聚合關(guān)系

    Maven 繼承是指在 Maven 的項(xiàng)目中,讓一個(gè)項(xiàng)目從另一個(gè)項(xiàng)目中繼承配置信息的機(jī)制。繼承可以讓我們?cè)诙鄠€(gè)項(xiàng)目中共享同一配置信息,簡(jiǎn)化項(xiàng)目的管理和維護(hù)工作。 在父工程中統(tǒng)一管理項(xiàng)目中的依賴(lài)信息。 它的背景是: 對(duì)一個(gè)比較大型的項(xiàng)目進(jìn)行了模塊拆分。 一個(gè) project 下

    2024年01月23日
    瀏覽(45)
  • Maven進(jìn)階系列-繼承和聚合

    Maven進(jìn)階系列-繼承和聚合

    Maven工程之間存在繼承關(guān)系,例如工程B繼承工程A,工程C也繼承了工程A ProjectA的pom.xml ProjectB的pom.xml ProjectC的pom.xml 本質(zhì)上是ProjectB和ProjectC的 pom.xml 中的配置 繼承了ProjectA中 pom.xml 的配置。 這里提到了 超級(jí)pom.xml ,對(duì)于我們創(chuàng)建的一個(gè)maven工程,即便我們自己的pom.xm文件中沒(méi)

    2024年02月07日
    瀏覽(19)
  • 【java】【maven】【高級(jí)】MAVEN聚合繼承屬性等

    【java】【maven】【高級(jí)】MAVEN聚合繼承屬性等

    目錄 1、模塊開(kāi)發(fā)與設(shè)計(jì) 2、聚合 2、繼承 3、屬性 4、版本管理 5、資源配置 6、多環(huán)境配置 7、多環(huán)境開(kāi)發(fā)配置 8、跳過(guò)測(cè)試 9、私服? 前言:maven的高級(jí)使用包含分模塊開(kāi)發(fā)與設(shè)計(jì)、聚合、繼承、屬性、版本管理、資源配置、多環(huán)境配置、多環(huán)境開(kāi)發(fā)配置、跳過(guò)測(cè)試、私服 ?

    2024年02月13日
    瀏覽(39)
  • Maven工程開(kāi)發(fā)中的繼承與聚合

    Maven工程開(kāi)發(fā)中的繼承與聚合

    設(shè)置一個(gè)空的maven工程,工程里面只有pom文件,另外將這個(gè)工程的打包方式設(shè)置為pom。 在聚合工程里面添加聚合工程里面管理的模塊 例如下面02工程繼承上面的01工程,在02工程的pom文件中要配置要繼承的父工程的依賴(lài),并添加上相對(duì)路徑。 此時(shí),2、3、4中所用公共依賴(lài)的模

    2024年02月16日
    瀏覽(22)
  • Maven分模塊-繼承-聚合-私服的高級(jí)用法

    Maven分模塊-繼承-聚合-私服的高級(jí)用法

    JavaWeb知識(shí),介紹Maven的高級(jí)用法?。?! Maven 是一款構(gòu)建和管理 Java 項(xiàng)目的工具 ,在需要開(kāi)發(fā)一些中大型的項(xiàng)目,此時(shí)僅憑前面所學(xué)習(xí)的 Maven 的基礎(chǔ)知識(shí)就比較難以應(yīng)對(duì)了。還需要學(xué)習(xí) Maven 提供的一些高級(jí)的功能,這些功能在構(gòu)建和管理 Java 項(xiàng)目的時(shí)候用的也是非常多的。

    2024年02月13日
    瀏覽(22)
  • 【Maven】依賴(lài)范圍、依賴(lài)傳遞、依賴(lài)排除、依賴(lài)原則、依賴(lài)?yán)^承

    【Maven】依賴(lài)范圍、依賴(lài)傳遞、依賴(lài)排除、依賴(lài)原則、依賴(lài)?yán)^承

    ??在 Maven 中,依賴(lài)范圍 (Dependency Scope) 用于控制依賴(lài)項(xiàng)在編譯、測(cè)試和運(yùn)行時(shí)的可見(jiàn)性和可用性。通過(guò)指定適當(dāng)?shù)囊蕾?lài)范圍,可以在不同的構(gòu)建和執(zhí)行環(huán)境中控制依賴(lài)項(xiàng)的加載和使用。 ?? compile(默認(rèn)) :該依賴(lài)項(xiàng)在編譯、測(cè)試和運(yùn)行時(shí)都可用。這是大多數(shù)依賴(lài)項(xiàng)的

    2024年02月14日
    瀏覽(20)
  • Maven 聚合和繼承 Inheritance vs Aggregation

    Maven 聚合和繼承 Inheritance vs Aggregation

    A Project Object Model or POM is the fundamental unit of work in Maven. It is an XML file that contains information about the project and configuration details used by Maven to build the project. It contains default values for most projects. Examples for this is the build directory, which is? target ; the source directory, which is? src/main/java ; the tes

    2024年02月09日
    瀏覽(25)
  • Maven工程 — 繼承與聚合 相關(guān)知識(shí)點(diǎn)詳解

    Maven工程 — 繼承與聚合 相關(guān)知識(shí)點(diǎn)詳解

    ?簡(jiǎn)介:這篇帖子主要講解Maven工程中的繼承與聚合的相關(guān)知識(shí)點(diǎn),用簡(jiǎn)潔的語(yǔ)言和小編自己的理解,深入淺出的說(shuō)明Maven工程的繼承與聚合。 目錄 1、繼承 1.1 繼承關(guān)系的實(shí)現(xiàn) 1.2 版本鎖定 2、聚合 2.1 聚合方法 3、總結(jié) 3.1 作用與聯(lián)系 4、私服 4.1 私服介紹 4.2 資源上傳與下載

    2024年01月25日
    瀏覽(27)
  • Maven高級(jí)操作--分模塊設(shè)計(jì)、聚合、繼承和私服

    Maven高級(jí)操作--分模塊設(shè)計(jì)、聚合、繼承和私服

    問(wèn)題:當(dāng)項(xiàng)目做大做強(qiáng)的時(shí)候,前面的基礎(chǔ)Spring開(kāi)發(fā)的框架都無(wú)法滿(mǎn)足java大型項(xiàng)目的維護(hù)和復(fù)用,而且團(tuán)隊(duì)合作也會(huì)造成較大的困難。 所以就需要 分模塊設(shè)計(jì) :將項(xiàng)目按照功能拆分成若干個(gè)子模塊,方便項(xiàng)目的 管理維護(hù) 、 擴(kuò)展 ,也方便模塊間的 相互調(diào)用 , 資源共享 。

    2024年02月11日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包