Maven 快速入門

從零開始的JAVA世界 2022-01-07 06:49:52 阅读数:145

maven 快速

黑馬視頻 https://www.bilibili.com/video/BV1Ah411S7ZE?from=search&seid=3408072882275695113&spm_id_from=333.337.0.0

Maven簡介

傳統項目管理狀態分析

  • jar包不統一,jar包不兼容
  • 工程昇級維護過程操作繁瑣

Maven是什麼

  • Maven的本質是一個項目管理工具,將項目開發和管理過程抽象成一個項目對象模型(POM)
  • POM(Project Object Model):項目對象模型
    在這裏插入圖片描述

Maven的作用

  • 項目構建:提供標准的、跨平臺的自動化項目構建方式
  • 依賴管理:方便快捷的管理項目依賴的資源(jar包),避免資源間的版本沖突問題
  • 統一開發結構:提供標准的、統一的項目結構
    在這裏插入圖片描述

下載與安裝

下載

Maven安裝

  • Maven屬於綠色版軟件,解壓即安裝
  • 解壓到本地
    在這裏插入圖片描述

Maven環境變量配置

  • 依賴Java,需要配置JAVA_HOME
  • 設置MAVEN自身的運行環境,需要配置MAVEN_HOME
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    打開命令行,輸入:mvn - version出現下面信息說明設置成功。
    在這裏插入圖片描述

Maven基礎概念 (重點)

倉庫

  • 倉庫:用於存儲資源,包含各種jar包
  • 倉庫分類:
    • 本地倉庫:自己電腦上存儲資源的倉庫,連接遠程倉庫獲取資源
    • 遠程倉庫:非本機電腦上的倉庫,為本地倉庫提供資源
      • 中央倉庫:Maven團隊維護,存儲所有資源的倉庫
      • 私服:部門/公司範圍內存儲資源的倉庫,從中央倉庫獲取資源
  • 私服的作用:
    • 保存具有版權的資源,包括購買或自主研發的jar
    • 中央倉庫的jar都是開源的,不能存儲具有版權的資源
    • 一定範圍內共享資源,僅對內部開放,不對外共享
      在這裏插入圖片描述

坐標

  • 什麼是坐標
  • Maven坐標主要組成
    • groupId: 定義當前Maven項目隸屬組織名稱(通常是域名反寫,例如org.mybatis)
    • artifactId: 定義當前Maven項目名稱(通常是模塊名稱,例如CRM,SMS)
    • version: 定義當前項目版本號
    • packing: 定義該項目的打包方式
  • Maven坐標的作用
    • 使用唯一標識,唯一性定比特資源比特置,通過該標識可以將資源的識別與下載工作交由機器完成

本地倉庫配置

  • Maven啟動後,會自動保存下載的資源到本地倉庫
    • D:\Environment\maven\apache-maven-3.8.3-bin\apache-maven-3.8.3/conf/settings.xml文件設置
      在這裏插入圖片描述
    • 默認比特置
      <localRepository>${user.home}/.m2/repository</localRepository>
      當前目錄比特置為登錄用戶名所在目錄下的.m2文件夾中
    • 自定義比特置
      <localRepository>D:\Environment\maven\local_repository</localRepository>
      當前目錄比特置為D:\Environment\maven\local_repository文件夾中

遠程倉庫配置查看

  • Maven默認連接的倉庫比特置
    在apache-maven-3.8.3\lib\maven-model-builder-3.8.3.jar\org\apache\maven\model\pom-4.0.0.xml中查看
 <repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

鏡像倉庫(私服)配置

  • 在settings.xml文件中配置阿裏雲鏡像倉庫
 <!--配置鏡像節點-->
<mirror>
<!--此鏡像的唯一標識符,用於區分不同的mirror元素-->
<id>aliyunmaven</id>
<!--對哪種倉庫進行鏡像,簡單說就是代替哪個倉庫-->
<mirrorOf>central</mirrorOf>
<!--鏡像名稱-->
<name>阿裏雲中央倉庫</name>
<!--鏡像URL-->
<url>https://maven.aliyun.com/repository/central</url>
</mirror>

全局settings.xml和用戶settings.xml區別

  • 全局setting定義了當前計算機中Maven的公共配置
  • 用戶setting定義了當前用戶的配置
  • 在本地倉庫同級目錄下再創建一個settings.xml文件用作個人配置,個人會覆蓋全局

第一個Maven項目(手工制作)(重點)

Maven工程目錄結構

  • 按照下面目錄結構,新建所有文件夾
    在這裏插入圖片描述
  • 在src同層目錄下創建pom.xml
    在這裏插入圖片描述
    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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--maven pom的版本號-->
<modelVersion>4.0.0</modelVersion>
<groupId>com.zhx</groupId>
<artifactId>project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
</project>

用模板創建工程 (不用手動創建目錄結構)

  • 創建命令mvn archetype:generate
    在這裏插入圖片描述
    在這裏插入圖片描述

第一個Maven項目(IDEA生成)(重點)

配置Maven

IDEA新建Empty項目,修改Maven配置
在這裏插入圖片描述

原型創建Java項目

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
將目錄補充完整
在這裏插入圖片描述
在這裏插入圖片描述

原型創建Web項目

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
將目錄補充完整
在這裏插入圖片描述
在這裏插入圖片描述
pom.xml添加tomcat運行插件
在這裏插入圖片描述

 <!--具體插件設置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>

依賴管理(重點)

依賴配置

  • 依賴指當前項目運行所需的jar,一個項目可以設置多個依賴
  • 格式:
 <!--當前工程的所有依賴-->
<dependencies>
<!--具體的依賴-->
<dependency>
<!--依賴所屬群組-->
<groupId>junit</groupId>
<!--依賴所屬項目Id-->
<artifactId>junit</artifactId>
<!--依賴版本號-->
<version>4.11</version>
</dependency>
</dependencies>

依賴傳遞

  • 依賴具有傳遞性:
    • 直接依賴:當前項目中通過依賴配置建立的依賴關系
    • 間接依賴:依賴的資源如果依賴其他資源,當前項目間接依賴其他資源

依賴傳遞沖突問題

  • 路徑優先:當依賴中出現相同的資源時,層級越深,優先級越低,層級越淺,優先級越高
  • 聲明優先:當資源在相同層級被依賴時,配置順序靠前的覆蓋配置順序靠後的
  • 特殊優先:直接依賴時配置了兩個相同資源的不同版本,後配置的覆蓋先配置的。(什麼行為???)

可選依賴

  • 可選依賴指對外隱藏當前所依賴的資源–不透明
<optional> ture</optional>

java02 junit依賴的隱藏打開,java01看不到java2 junit的依賴
在這裏插入圖片描述

<optional>false</optional>

java02 junit依賴的隱藏關閉,java01能看到java2 junit的依賴
在這裏插入圖片描述

排除依賴

  • 將依賴的依賴中不要的資源在導包時就排除
 <exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>

在這裏插入圖片描述

依賴範圍

  • 依賴的jar默認情况可以在任何地方使用,可以通過scope標簽設定起作用的範圍
  • 作用範圍
    • 主程序範圍有效(main文件夾範圍內)
    • 測設程序範圍有效(test文件夾內)
    • 是否參與打包(package指令範圍內)
<scope>compile</scope>

在這裏插入圖片描述

依賴範圍傳遞性 (了解)

  • 帶有依賴範圍的資源進行傳遞時,作用範圍將受到影響
    在這裏插入圖片描述

生命周期與插件

項目構建生命周期

  • Maven構建生命周期描述的是一次構建過程經曆了多少個事件
  • Maven對項目構建的生命周期劃分為3套
    • clean:清理
    • default:核心工作,例如編譯,測試,打包,部署等
    • site: 產生報告,發布站點等

clean生命周期

  • pre-clean 執行一些需要在clean執行完成的工作
  • clean 移除所有上一次構建生成的文件
  • post-clean 執行一些需要在clean之後立刻完成的工作

default構建生命周期

B站視頻

  • validate(校驗) 校驗項目是否正確並且所有必要的信息可以完成項目的構建過程。
  • initialize(初始化) 初始化構建狀態,比如設置屬性值。
  • generate-sources(生成源代碼) 生成包含在編譯階段中的任何源代碼。
  • process-sources(處理源代碼) 處理源代碼,比如說,過濾任意值。
  • generate-resources(生成資源文件) 生成將會包含在項目包中的資源文件。
  • process-resources (處理資源文件) 複制和處理資源到目標目錄,為打包階段最好准備。
  • compile(編譯) 編譯項目的源代碼。
  • process-classes(處理類文件) 處理編譯生成的文件,比如說對Java class文件做字節碼改善優化。
  • generate-test-sources(生成測試源代碼) 生成包含在編譯階段中的任何測試源代碼。
  • process-test-sources(處理測試源代碼) 處理測試源代碼,比如說,過濾任意值。
  • generate-test-resources(生成測試資源文件) 為測試創建資源文件。
  • process-test-resources(處理測試資源文件) 複制和處理測試資源到目標目錄。
  • test-compile(編譯測試源碼) 編譯測試源代碼到測試目標目錄.
  • process-test-classes(處理測試類文件) 處理測試源碼編譯生成的文件。
  • test(測試) 使用合適的單元測試框架運行測試(Juint是其中之一)。
  • prepare-package(准備打包) 在實際打包之前,執行任何的必要的操作為打包做准備。
  • package(打包) 將編譯後的代碼打包成可分發格式的文件,比如JAR、WAR或者EAR文件。
  • pre-integration-test(集成測試前) 在執行集成測試前進行必要的動作。比如說,搭建需要的環境。
  • integration-test(集成測試) 處理和部署項目到可以運行集成測試環境中。
  • post-integration-test(集成測試後) 在執行集成測試完成後進行必要的動作。比如說,清理集成測試環境。
  • verify (驗證) 運行任意的檢查來驗證項目包有效且達到質量標准。
  • install(安裝) 安裝項目包到本地倉庫,這樣項目包可以用作其他本地項目的依賴。
  • deploy(部署) 將最終的項目包複制到遠程倉庫中與其他開發者和項目共享

site構建生命周期

  • pre-site 執行一些需要在生成站點文檔之前的工作
  • site 生成項目的站點文檔
  • post-site 執行一些需要在生成站點文檔之後完成的工作,並且為部署做准備
  • site-ploy 將生成的站點文檔部署到特定的服務器上

插件

  • 插件與生命周期內的階段綁定,在執行到對應生命周期時執行對應的插件功能。
  • 默認maven在各個生命周期上綁定有預設的功能
  • 通過插件可以自定義其他功能
    Maven官網插件詳細
 <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
版权声明:本文为[從零開始的JAVA世界]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201070649517850.html