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

一、高效構建Java應用:Maven入門和進階

這篇具有很好參考價值的文章主要介紹了一、高效構建Java應用:Maven入門和進階。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、高效構建Java應用:Maven入門和進階

目錄

  • 一、Maven簡介和快速入門
    • 1.1 Maven介紹
    • 1.2 Maven主要作用理解
    • 1.3 Maven安裝和配置
  • 二、基于IDEA的Maven工程創(chuàng)建
    • 2.1梳理Maven工程GAVP屬性
    • 2.2 Idea構建Maven JavaSE工程
    • 2.3 Idea構建Maven JavaEE工程
    • 2.4 Maven工程項目結構說明
  • 三、Maven核心功能依賴和構建管理
    • 3.1 依賴管理和配置
    • 3.2依賴傳遞和沖突
    • 3.3 依賴導入失敗場景和解決方案
    • 3.4 擴展構建管理和插件配置
  • 四、Maven繼承和聚合特性
    • 4.1 Maven工程繼承關系
    • 4.2 Maven工程聚合關系
  • 五、Maven實戰(zhàn)案例:搭建微服務Maven工程架構
    • 5.1 項目需求和結構分析
    • 5.2項目搭建和統(tǒng)一構建
  • 六、Maven核心掌握總結

一、Maven簡介和快速入門

1.1 Maven介紹

https://maven.apache.org/what-is-maven.html

Maven 是一款為 Java 項目構建管理、依賴管理的工具(軟件),使用 Maven 可以自動化構建、測試、打包和發(fā)布項目,大大提高了開發(fā)效率和質(zhì)量。

總結:Maven就是一個軟件,掌握軟件安裝、配置、以及基本功能 (項目構建、依賴管理) 使用就是本課程的主要目標!

1.2 Maven主要作用理解

  1. 場景概念

    場景1: 例如我們項目需要第三方庫(依賴),如Druid連接池、MySQL數(shù)據(jù)庫驅(qū)動和Jackson等。那么我們可以將需要的依賴項的信息編寫到Maven工程的配置文件,Maven軟件就會自動下載并復制這些依賴項到項目中,也會自動下載依賴需要的依賴!確保依賴版本正確無沖突和依賴完整!

    場景2: 項目開發(fā)完成后,想要將項目打成.war文件,并部署到服務器中運行,使用Maven軟件,我們可以通過一行構建命令(mvn package)快速項目構建和打包!節(jié)省大量時間!

  2. 依賴管理:

    Maven 可以管理項目的依賴,包括自動下載所需依賴庫、自動下載依賴需要的依賴并且保證版本沒有沖突、依賴版本管理等。通過 Maven,我們可以方便地維護項目所依賴的外部庫,而我們僅僅需要編寫配置即可。

  3. 構建管理:

    項目構建是指將源代碼、配置文件、資源文件等轉化為能夠運行或部署的應用程序或庫的過程!

    Maven 可以管理項目的編譯、測試、打包、部署等構建過程。通過實現(xiàn)標準的構建生命周期,Maven 可以確保每一個構建過程都遵循同樣的規(guī)則和最佳實踐。同時,Maven 的插件機制也使得開發(fā)者可以對構建過程進行擴展和定制。主動觸發(fā)構建,只需要簡單的命令操作即可。

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

1.3 Maven安裝和配置

https://maven.apache.org/docs/history.html

選用版本:

apache-maven-3.6.3-bin.zip

發(fā)布時間 maven版本 jdk最低版本
**2019 - 11 - **25 3.6. 3 Java 7
  1. 安裝

    安裝條件: maven需要本機安裝java環(huán)境、必需包含java_home環(huán)境變量!

    軟件安裝: 右鍵解壓即可(綠色免安裝)

    軟件結構:

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

  2. 環(huán)境變量

    環(huán)境變量: 配置maven_home 和 path

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

  3. 命令測試

    mvn -v 
    # 輸出版本信息即可,如果錯誤,請仔細檢查環(huán)境變量即可!
    # 友好提示,如果此處錯誤,絕大部分原因都是java_home變量的事,請仔細檢查?。?/span>
    
  4. 配置文件

    我們需要需改maven/conf/settings.xml配置文件,來修改maven的一些默認配置。我們主要休要修改的有三個配置:1.依賴本地緩存位置(本地倉庫位置)2.maven下載鏡像3.maven選用編譯項目的jdk版本!

    1. 配置本地倉庫地址
      <!-- localRepository
       | The path to the local repository maven will use to store artifacts.
       |
       | Default: ${user.home}/.m2/repository
      <localRepository>/path/to/local/repo</localRepository>
      -->
      <!-- conf/settings.xml 55行 -->
      <localRepository>D:\repository</localRepository>
      
    2. 配置國內(nèi)阿里鏡像
      <!--在mirrors節(jié)點(標簽)下添加中央倉庫鏡像 160行附近-->
      <mirror>
          <id>alimaven</id>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
          <mirrorOf>central</mirrorOf>
      </mirror>
      
    3. 配置jdk17版本項目構建
      <!--在profiles節(jié)點(標簽)下添加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>
      
  5. idea配置本地maven

    我們需要將配置好的maven軟件,配置到idea開發(fā)工具中即可! 注意:idea工具默認自帶maven配置軟件,但是因為沒有修改配置,建議替換成本地配置好的maven!

    1. 打開idea配置文件,構建工具配置

      依次點擊

      file / settings / build / build tool / maven

    2. 選中本地maven軟件

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    3. 測試是否配置成功

      注意:如果本地倉庫地址不變化,只有一個原因,就是maven/conf/settings.xml配置文件編寫錯誤!仔細檢查即可!

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

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

2.1梳理Maven工程GAVP屬性

Maven工程相對之前的工程,多出一組gavp屬性,gav需要我們在創(chuàng)建項目的時指定,p有默認值,后期通過配置文件修改。既然要填寫的屬性,我們先行了解下這組屬性的含義!

Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四個屬性的縮寫,其中前三個是必要的,而 Packaging 屬性為可選項。這四個屬性主要為每個項目在maven倉庫總做一個標識,類似人的《姓-名》。有了具體標識,方便maven軟件對項目進行管理和互相引用!

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

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

說明:{公司/BU} 例如:alibaba/taobao/tmall/aliexpress 等 BU 一級;子業(yè)務線可選。

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

2) ArtifactID 格式:產(chǎn)品線名-模塊名。語義不重復不遺漏,先到倉庫中心去查證一下。

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

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

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

2) 次版本號:當做了向下兼容的功能性新增(新增類、接口等)。

3) 修訂號:修復 bug,沒有修改方法簽名的功能加強,保持 API 兼容性。

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

Packaging定義規(guī)則:

指示將項目打包為什么類型的文件,idea根據(jù)packaging值,識別maven項目類型!

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

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

packaging 屬性為 pom,代表不會打包,用來做繼承的父工程。

2.2 Idea構建Maven JavaSE工程

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

自己后期可以在項目中隨意修改!

一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

2.3 Idea構建Maven JavaEE工程

  1. 手動創(chuàng)建
    1. 創(chuàng)建一個javasemaven工程

    2. 手動添加web項目結構文件

      注意:結構和命名固定

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    3. 修改pom.xml文件打包方式

      修改位置:項目下/pom.xml

      <groupId>com.atguigu</groupId>
      <artifactId>maven_parent</artifactId>
      <version>1.0-SNAPSHOT</version>
      <!-- 新增一列打包方式packaging -->
      <packaging>war</packaging>
      
    4. 刷新和校驗

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

      項目的webapp文件夾出現(xiàn)小藍點,代表成功??!

  2. 插件方式創(chuàng)建
    1. 安裝插件JBLJavaToWeb

      file / settings / plugins / marketplace

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    2. 創(chuàng)建一個javasemaven工程

    3. 右鍵、使用插件快速補全web項目

      外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2.4 Maven工程項目結構說明

Maven 是一個強大的構建工具,它提供一種標準化的項目結構,可以幫助開發(fā)者更容易地管理項目的依賴、構建、測試和發(fā)布等任務。以下是 Maven Web 程序的文件結構及每個文件的作用:

|-- pom.xml                               # Maven 項目管理文件 
|-- src
    |-- main                              # 項目主要代碼
    |   |-- java                          # Java 源代碼目錄
    |   |   `-- com/example/myapp         # 開發(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 相關配置和資源
    |       |-- WEB-INF                   # 存放 WEB 應用配置文件
    |       |   |-- web.xml               # Web 應用的部署描述文件
    |       |   `-- classes               # 存放編譯后的 class 文件
    |       `-- index.html                # Web 應用入口頁面
    `-- test                              # 項目測試代碼
        |-- java                          # 單元測試目錄
        `-- resources                     # 測試資源目錄
  • pom.xml:Maven 項目管理文件,用于描述項目的依賴和構建配置等信息。
  • src/main/java:存放項目的 Java 源代碼。
  • src/main/resources:存放項目的資源文件,如配置文件、靜態(tài)資源等。
  • src/main/webapp/WEB-INF:存放 Web 應用的配置文件。
  • src/main/webapp/index.html:Web 應用的入口頁面。
  • src/test/java:存放項目的測試代碼。
  • src/test/resources:存放測試相關的資源文件,如測試配置文件等。

三、Maven核心功能依賴和構建管理

3.1 依賴管理和配置

Maven 依賴管理是 Maven 軟件中最重要的功能之一。Maven 的依賴管理能夠幫助開發(fā)人員自動解決軟件包依賴問題,使得開發(fā)人員能夠輕松地將其他開發(fā)人員開發(fā)的模塊或第三方框架集成到自己的應用程序或模塊中,避免出現(xiàn)版本沖突和依賴缺失等問題。

我們通過定義 POM 文件,Maven 能夠自動解析項目的依賴關系,并通過 Maven 倉庫自動下載和管理依賴,從而避免了手動下載和管理依賴的繁瑣工作和可能引發(fā)的版本沖突問題。

重點: 編寫pom.xml文件!

maven項目信息屬性配置和讀取:

<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者組織的唯一標志,并且配置時生成的路徑也是由此生成, 如com.companyname.project-group,maven會將該項目打成的jar包放本地路徑:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 項目的唯一ID,一個groupId下面可能多個項目,就是靠artifactId來區(qū)分的 -->
<artifactId>project</artifactId>
<!-- 版本號 -->
<version>1.0.0</version>

<!--打包方式
    默認:jar
    jar指的是普通的java項目打包方式! 項目打成jar包!
    war指的是web項目打包方式!項目打成war包!
    pom不會講項目打包!這個項目作為父工程,被其他工程聚合或者繼承!后面會講解兩個概念
-->
<packaging>jar/pom/war</packaging>

依賴管理和添加:

<!-- 
   通過編寫依賴jar包的gav必要屬性,引入第三方依賴!
   scope屬性是可選的,可以指定依賴生效范圍!
   依賴信息查詢方式:
      1. maven倉庫信息官網(wǎng) https://mvnrepository.com/
      2. mavensearch插件搜索
 -->
<dependencies>
    <!-- 引入具體的依賴包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <!--
            生效范圍
            - compile :main目錄 test目錄  打包打包 [默認]
            - provided:main目錄 test目錄  Servlet
            - runtime: 打包運行           MySQL
            - test:    test目錄           junit
         -->
        <scope>runtime</scope>
    </dependency>

</dependencies>

依賴版本提取和維護:

<!--聲明版本-->
<properties>
  <!--命名隨便,內(nèi)部制定版本號即可!-->
  <junit.version>4.11</junit.version>
  <!-- 也可以通過 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>

3.2依賴傳遞和沖突

依賴傳遞指的是當一個模塊或庫 A 依賴于另一個模塊或庫 B,而 B 又依賴于模塊或庫 C,那么 A 會間接依賴于 C。這種依賴傳遞結構可以形成一個依賴樹。當我們引入一個庫或框架時,構建工具(如 Maven、Gradle)會自動解析和加載其所有的直接和間接依賴,確保這些依賴都可用。

依賴傳遞的作用是:

  1. 減少重復依賴:當多個項目依賴同一個庫時,Maven 可以自動下載并且只下載一次該庫。這樣可以減少項目的構建時間和磁盤空間。
  2. 自動管理依賴: Maven 可以自動管理依賴項,使用依賴傳遞,簡化了依賴項的管理,使項目構建更加可靠和一致。
  3. 確保依賴版本正確性:通過依賴傳遞的依賴,之間都不會存在版本兼容性問題,確實依賴的版本正確性!

依賴傳遞演示:

項目中,需要導入jackson相關的依賴,通過之前導入經(jīng)驗,jackson需要導入三個依賴,分別為:

一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

通過查看網(wǎng)站介紹的依賴傳遞特性:data-bind中,依賴其他兩個依賴

一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

最佳導入:直接可以導入data-bind,自動依賴傳遞需要的依賴

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>

依賴沖突演示:

當直接引用或者間接引用出現(xiàn)了相同的jar包! 這時呢,一個項目就會出現(xiàn)相同的重復jar包,這就算作沖突!依賴沖突避免出現(xiàn)重復依賴,并且終止依賴傳遞!

一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

maven自動解決依賴沖突問題能力,會按照自己的原則,進行重復依賴選擇。同時也提供了手動解決的沖突的方式,不過不推薦!

解決依賴沖突(如何選擇重復依賴)方式:

  1. 自動選擇原則
    • 短路優(yōu)先原則(第一原則)

      A—>B—>C—>D—>E—>X(version 0.0.1)

      A—>F—>X(version 0.0.2)

      則A依賴于X(version 0.0.2)。

    • 依賴路徑長度相同情況下,則“先聲明優(yōu)先”(第二原則)

      A—>E—>X(version 0.0.1)

      A—>F—>X(version 0.0.2)

      在<depencies></depencies>中,先聲明的,路徑相同,會優(yōu)先選擇!

小思考:

前提:
   A 1.1 -> B 1.1 -> C 1.1 
   F 2.2 -> B 2.2 
   
pom聲明:
   F 2.2
   A 1.1 
   
   B 2.2 

3.3 依賴導入失敗場景和解決方案

在使用 Maven 構建項目時,可能會發(fā)生依賴項下載錯誤的情況,主要原因有以下幾種:

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

解決方案:

  1. 檢查網(wǎng)絡連接和 Maven 倉庫服務器狀態(tài)。

  2. 確保依賴項的版本號與項目對應的版本號匹配,并檢查 POM 文件中的依賴項是否正確。

  3. 清除本地 Maven 倉庫緩存(lastUpdated 文件),因為只要存在lastupdated緩存文件,刷新也不會重新下載。本地倉庫中,根據(jù)依賴的gav屬性依次向下查找文件夾,最終刪除內(nèi)部的文件,刷新重新下載即可!

    例如: pom.xml依賴

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>
    

    文件:

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    腳本使用:

    清理maven錯誤緩存.bat

    使用記事本打開
    set REPOSITORY_PATH=D:\repository  改成你本地倉庫地址即可!
    點擊運行腳本,即可自動清理本地錯誤緩存文件!!
    

3.4 擴展構建管理和插件配置

構建概念:

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

一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

主動觸發(fā)場景:

  • 重新編譯 : 編譯不充分, 部分文件沒有被編譯!
  • 打包 : 獨立部署到外部服務器軟件,打包部署
  • 部署本地或者私服倉庫 : maven工程加入到本地或者私服倉庫,供其他工程使用

命令方式構建:

語法: mvn 構建命令 構建命令…

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

可視化方式構建:

一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

構建命令周期:

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

  • 清理周期:主要是對項目編譯生成文件進行清理

    包含命令:clean

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

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

  • 報告周期

    包含命令:site

    打包: mvn clean package 本地倉庫: mvn clean install

最佳使用方案:

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

周期,命令和插件:

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

使用周期命令構建,簡化構建過程!

最終進行構建的是插件!

插件配置:

<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繼承和聚合特性

4.1 Maven工程繼承關系

  1. 繼承概念

    Maven 繼承是指在 Maven 的項目中,讓一個項目從另一個項目中繼承配置信息的機制。繼承可以讓我們在多個項目中共享同一配置信息,簡化項目的管理和維護工作。

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

  2. 繼承作用

    作用:在父工程中統(tǒng)一管理項目中的依賴信息,進行統(tǒng)一版本管理!

    它的背景是:

    • 對一個比較大型的項目進行了模塊拆分。
    • 一個 project 下面,創(chuàng)建了很多個 module。
    • 每一個 module 都需要配置自己的依賴信息。
      它背后的需求是:
    • 多個模塊要使用同一個框架,它們應該是同一個版本,所以整個項目中使用的框架版本需要統(tǒng)一管理。
    • 使用框架時所需要的 jar 包組合(或者說依賴信息組合)需要經(jīng)過長期摸索和反復調(diào)試,最終確定一個可用組合。這個耗費很大精力總結出來的方案不應該在新的項目中重新摸索。
      通過在父工程中為整個項目維護依賴信息的組合既保證了整個項目使用規(guī)范、準確的 jar 包;又能夠?qū)⒁酝慕?jīng)驗沉淀下來,節(jié)約時間和精力。
  3. 繼承語法

    • 父工程
    <groupId>com.atguigu.maven</groupId>
    <artifactId>pro03-maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 當前工程作為父工程,它要去管理子工程,所以打包方式必須是 pom -->
    <packaging>pom</packaging>
    
    
    • 子工程
    <!-- 使用parent標簽指定當前工程的父工程 -->
    <parent>
      <!-- 父工程的坐標 -->
      <groupId>com.atguigu.maven</groupId>
      <artifactId>pro03-maven-parent</artifactId>
      <version>1.0-SNAPSHOT</version>
    </parent>
    
    <!-- 子工程的坐標 -->
    <!-- 如果子工程坐標中的groupId和version與父工程一致,那么可以省略 -->
    <!-- <groupId>com.atguigu.maven</groupId> -->
    <artifactId>pro04-maven-module</artifactId>
    <!-- <version>1.0-SNAPSHOT</version> -->
    
  4. 父工程依賴統(tǒng)一管理

    • 父工程聲明版本
      <!-- 使用dependencyManagement標簽配置對依賴的管理 -->
      <!-- 被管理的依賴并沒有真正被引入到工程 -->
      <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>
      
    • 子工程引用版本
      <!-- 子工程引用父工程中的依賴信息時,可以把版本號去掉。  -->
      <!-- 把版本號去掉就表示子工程中這個依賴的版本由父工程決定。 -->
      <!-- 具體來說是由父工程的dependencyManagement來決定。 -->
      <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>
      

4.2 Maven工程聚合關系

  1. 聚合概念

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

  2. 聚合作用

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

    父項目中包含的子項目列表。

    <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>
    
  4. 聚合演示

    通過觸發(fā)父工程構建命令、引發(fā)所有子模塊構建!產(chǎn)生反應堆!

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

五、Maven實戰(zhàn)案例:搭建微服務Maven工程架構

5.1 項目需求和結構分析

一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

需求案例:搭建一個電商平臺項目,該平臺包括用戶服務、訂單服務、通用工具模塊等。

項目架構:

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

服務依賴:

  1. 用戶服務 (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. 訂單服務 (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

5.2項目搭建和統(tǒng)一構建

  1. 父模塊搭建 (micro-shop)

    1. 創(chuàng)建父工程

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    2. 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.atguigu</groupId>
          <artifactId>micro-shop</artifactId>
          <version>1.0.1</version>
          <!-- 父工程不打包,所以選擇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>
      
          <!-- 依賴管理 -->
          <dependencyManagement>
              <dependencies>
                  <!-- spring-context會依賴傳遞core/beans -->
                  <dependency>
                      <groupId>org.springframework</groupId>
                      <artifactId>spring-context</artifactId>
                      <version>${spring.version}</version>
                  </dependency>
      
                  <!-- jackson-databind會依賴傳遞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>
              <!-- 父工程添加依賴,會自動傳遞給所有子工程,不推薦! -->
          </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>
      
  2. 通用模塊 (common-service)

    1. 創(chuàng)建模塊

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    2. 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>
          <parent>
              <groupId>com.atguigu</groupId>
              <artifactId>micro-shop</artifactId>
              <version>1.0.1</version>
          </parent>
          <artifactId>common-service</artifactId>
          <!-- 打包方式默認就是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>
      
  3. 用戶模塊 (user-service)

    1. 創(chuàng)建模塊

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

      一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea

    2. 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>  
        <parent> 
          <groupId>com.atguigu</groupId>  
          <artifactId>micro-shop</artifactId>  
          <version>1.0.1</version> 
        </parent>  
        <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 自動傳遞 core / beans -->
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
          </dependency>
      
          <!-- 添加jackson-databind 自動傳遞 core / annotations -->
          <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
          </dependency>
        </dependencies>
      </project>
      
      
  4. 訂單模塊 (order-service)

    1. 創(chuàng)建模塊

    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea
    一、高效構建Java應用:Maven入門和進階,Java,# ssm,java,maven,intellij-idea文章來源地址http://www.zghlxwxcb.cn/news/detail-718084.html

    1. 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>
          <parent>
              <groupId>com.atguigu</groupId>
              <artifactId>micro-shop</artifactId>
              <version>1.0.1</version>
          </parent>
      
          <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>
              <!-- 繼承父工程依賴版本 -->
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-context</artifactId>
              </dependency>
      
              <!-- 繼承父工程依賴版本 -->
              <dependency>
                  <groupId>org.apache.shiro</groupId>
                  <artifactId>shiro-core</artifactId>
              </dependency>
          </dependencies>
      
      </project>
      

六、Maven核心掌握總結

核心點 掌握目標
安裝 maven安裝、環(huán)境變量、maven配置文件修改
工程創(chuàng)建 gavp屬性理解、JavaSE/EE工程創(chuàng)建、項目結構
依賴管理 依賴添加、依賴傳遞、版本提取、導入依賴錯誤解決
構建管理 構建過程、構建場景、構建周期等
繼承和聚合 理解繼承和聚合作用、繼承語法和實踐、聚合語法和實踐

到了這里,關于一、高效構建Java應用:Maven入門和進階的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【Java 進階篇】Maven 使用詳解:打造便捷高效的項目構建利器

    【Java 進階篇】Maven 使用詳解:打造便捷高效的項目構建利器

    在軟件開發(fā)的道路上,項目構建是一個不可避免的過程。而Maven,作為一個強大的項目管理和構建工具,為開發(fā)者提供了一套標準化的項目結構和構建流程。本文將圍繞Maven的使用詳解,手把手地帶你探索Maven的世界,讓你在項目構建的征途上更加得心應手。 Maven是一個項目管

    2024年01月22日
    瀏覽(48)
  • 使用Maven容器打包Java項目:一步步實現(xiàn)高效構建

    在Java開發(fā)中,使用Maven作為構建工具是一個普遍的選擇。它提供了簡單易用的方式來管理依賴、編譯代碼、運行單元測試并打包項目。本文將詳細介紹如何使用Maven容器打包Java項目,讓您的項目構建過程更加高效和可靠。 在開始之前,請確保您已經(jīng)安裝了Maven和Docker,并設置

    2024年02月13日
    瀏覽(20)
  • 【Idea+Maven+Git:構建高效Java項目的強大組合】

    【Idea+Maven+Git:構建高效Java項目的強大組合】

    在當今的軟件開發(fā)世界中,集成開發(fā)環(huán)境(IDE)、構建工具和版本控制系統(tǒng)是每個項目不可或缺的組成部分。本文將深入探討這三個工具:IntelliJ IDEA、Maven和Git,以及它們?nèi)绾螀f(xié)同工作,幫助開發(fā)者構建更高效、更可靠的項目。上一篇介紹了Git的分支管理策略,本文將介紹相

    2024年02月20日
    瀏覽(26)
  • 高效使用Java構建工具|Maven篇|云效工程師指北

    高效使用Java構建工具|Maven篇|云效工程師指北

    大家好,我是胡曉宇,目前在云效主要負責Flow流水線編排、任務調(diào)度與執(zhí)行引擎相關的工作。 作為一個有多年Java開發(fā)測試工具鏈開發(fā)經(jīng)驗的CRUD專家,使用過所有主流的Java構建工具,對于如何高效使用Java構建工具沉淀了一套方法。眾所周知,當前最主流的Java構建工具為Ma

    2024年02月03日
    瀏覽(20)
  • 【Maven】讓maven更高效,優(yōu)化maven構建項目速度

    【Maven】讓maven更高效,優(yōu)化maven構建項目速度

    打開idea的setting,找到maven,設置它多線程數(shù),重啟后即可! 我這里是8,你們可以隨便設置。 如下圖:

    2024年02月14日
    瀏覽(28)
  • 【Java架構-包管理工具】-Maven進階(二)

    【Java架構-包管理工具】-Maven進階(二)

    Maven作為Java后端使用頻率非常高的一款依賴管理工具,在此咱們由淺入深,分三篇文章(Maven基礎、Maven進階、私服搭建)來深入學習Maven,此篇為開篇主要介紹Maven進階知識,包含坐標、依賴、倉庫、生命周期、插件、繼承 ??坐標是構件的唯一標識,Maven 坐標的元素包括

    2024年02月11日
    瀏覽(20)
  • 本地構建包含java和maven的鏡像

    本地構建包含java和maven的鏡像

    目錄 1.前提條件 2.下載 2.1.創(chuàng)建Dockerfile 3.構建鏡像 參考文章 本地環(huán)境需要的系統(tǒng)和軟件 win10 + Docker Desktop + Powershell 圖1 Win10安裝Docker后,直接在Powershell使用Docker命令 有些Developer不習慣win10系統(tǒng),卻想要使用Linux,推薦以下方式 win10 + WSL2 + Ubuntu(截止202308最新版本是20.04.xx) +D

    2024年02月13日
    瀏覽(28)
  • 【Maven】Maven入門,Java界的Anaconda!

    【Maven】Maven入門,Java界的Anaconda!

    官方文檔:Apache Maven 的本質(zhì)是一個軟件項目管理和理解工具?;陧椖繉ο竽P?(Project Object Model,POM) 的概念,Maven 可以從一條中心信息管理項目的構建、報告和文檔。 就像Python和Anaconda的關系?? 可以幫助Javer完成構建、文檔生成、報告、依賴、發(fā)布、分發(fā)等等功能! 可以

    2024年02月08日
    瀏覽(19)
  • Java Maven 構建項目里面有個聚合的概念

    Java Maven 構建項目里面有個聚合的概念

    Java 項目里面有個聚合的概念,它沒有.net里面解決方案(solution)的能力,可以統(tǒng)一的編譯項目下的所有包,或設置統(tǒng)一的打包路徑,使用maven編譯后的產(chǎn)物也不會像.net那樣編譯到當前項目的bin文件夾下面,而是統(tǒng)一的生成到配置好的 settings.xml 文件的 localRepository 配置節(jié)下的路

    2024年02月14日
    瀏覽(28)
  • Java開發(fā)+Intellij-idea+Maven+工程構建

    Java開發(fā)+Intellij-idea+Maven+工程構建

    Intellij-idea是一款流行的Java集成開發(fā)環(huán)境,它支持Maven作為項目管理和構建工具。Maven可以幫助開發(fā)者自動下載項目依賴的jar包,執(zhí)行編譯、測試、打包等生命周期任務。本資源將介紹如何在Intellij-idea中創(chuàng)建、導入、轉換和編譯Maven工程,以及如何配置Maven的相關參數(shù)和插件。

    2024年02月01日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包