Maven 入門實戰(1)--簡介及安裝

来源:https://www.cnblogs.com/wuyongyin/archive/2023/06/24/17384045.html
-Advertisement-
Play Games

Maven 是一種軟體項目管理和理解工具;它基於項目對象模型(POM),從中央位置管理項目的構建、報告和文檔,並幫助開發人員輕鬆管理依賴項並自動化構建過程。 1、簡介 1.1、項目目錄 Maven 使用約定優於配置的原則,提倡使用一個共同的標準目錄結構。 目錄說明 ${basedir} 項目根目錄, ...


Maven 是一種軟體項目管理和理解工具;它基於項目對象模型(POM),從中央位置管理項目的構建、報告和文檔,並幫助開發人員輕鬆管理依賴項並自動化構建過程。

1、簡介

1.1、項目目錄

Maven 使用約定優於配置的原則,提倡使用一個共同的標準目錄結構。

目錄說明
${basedir} 項目根目錄,存放 pom.xml 和 所有的子目錄
${basedir}/src/main/java java 源代碼
${basedir}/src/main/resources 資源目錄
${basedir}/src/test/java 測試代碼
${basedir}/src/test/resources 測試用的資源
${basedir}/src/main/webapp/WEB-INF web 應用目錄
${basedir}/target 打包輸出目錄
${basedir}/target/classes 編譯輸出目錄
${basedir}/target/test-classes 測試編譯輸出目錄
~/.m2/repository Maven 預設的本地倉庫目錄

1.2、生命周期

Maven 有三個標準的生命周期:

  • clean:項目清理
  • default(build):項目部署
  • site:項目站點文檔創建

每個生命周期又包含多個階段。

1.2.1、clean 生命周期

生命周期階段 說明
pre-clean 執行一些需要在 clean 之前完成的工作
clean 移除所有上一次構建生成的文件
post-clean 執行一些需要在 clean 之後完成的工作

1.2.2、default(build) 生命周期

生命周期階段說明
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(部署) 將最終的項目包複製到遠程倉庫,與其他開發者和項目共用

1.2.3、site 生命周期

生命周期階段 說明
pre-site 執行一些需要在生成站點文檔之前完成的工作
site 生成項目的站點文檔
post-site 執行一些需要在生成站點文檔之後完成的工作,並且為部署做準備
site-deploy 將生成的站點文檔部署到特定的伺服器上

1.3、Maven 插件

Maven 每個生命周期中都包含著一系列的階段(phase);這些 phase 相當於 Maven 提供的統一的介面,這些 phase的實現由 Maven 的插件來完成。我們在輸入 mvn 命令的時候,比如 mvn clean,clean 對應的就是 clean 生命周期中的 clean 階段。但是 clean 的具體操作是由 maven-clean-plugin 來實現的。所以說 Maven 生命周期的每一個階段的具體實現都是由 Maven 插件實現的。Maven 實際上是一個依賴插件執行的框架,每個任務實際上是由插件完成。Maven 插件通常被用來:

插件通常提供了一個目標的集合,可以使用下麵的語法執行:

mvn [plugin-name]:[goal-name]

例如,一個 Java 工程可以使用 maven-compiler-plugin 的 compile-goal 編譯,使用以下命令:

mvn compiler:compile

常用插件:

插件說明
clean 清理目標文件,刪除目標目錄
compiler 編譯 Java 源文件
surefile 運行 JUnit 單元測試,創建測試報告
jar 構建 JAR 文件
war 構建 WAR 文件
javadoc 為工程生成 Javadoc

1.4、倉庫

Maven 倉庫是項目中依賴的第三方庫,這個庫所在的位置叫做倉庫。在 Maven 中,任何一個依賴、插件或者項目構建的輸出,都可以稱之為構件。Maven 倉庫能幫助我們管理構件(主要是JAR),它就是放置所有 JAR、WAR、ZIP、POM 文件的地方。Maven 倉庫有三種類型:本地(local)、中央(central)、遠程(remote)。

1.4.1、本地倉庫

Maven 的本地倉庫,在安裝 Maven 後並不會創建,它是在第一次執行 maven 命令的時候才被創建。運行 Maven 的時候,Maven 所需要的任何構件都是直接從本地倉庫獲取的。如果本地倉庫沒有,它會首先嘗試從遠程倉庫下載構件至本地倉庫,然後再使用本地倉庫的構件。Maven 本地倉庫目錄預設為:%USER_HOME%/.m2/repository;要修改預設位置,可在 Maven 的 settings.xml 文件中設置另一個路徑:

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
  <localRepository>d:/repo</localRepository>
/>

1.4.2、中央倉庫

Maven 中央倉庫是由 Maven 社區提供的倉庫,其中包含了大量常用的庫。中央倉庫包含了絕大多數流行的開源 Java 構件,以及源碼、作者信息、SCM、信息、許可證信息等。一般來說,簡單的 Java項目依賴的構件都可以在這裡下載到。中央倉庫不需要配置,但需要通過網路才能訪問。maven 社區提供了一個網站用來搜索瀏覽中央倉庫的內容:https://central.sonatype.com/;通過該網站可以方便搜索查看相應的構件。

1.4.3、遠程倉庫

如果 Maven 在中央倉庫中也找不到依賴的文件,它會停止構建過程並輸出錯誤信息到控制台。為避免這種情況,Maven 提供了遠程倉庫的概念,它是開發人員自己定製倉庫,包含了所需要的代碼庫或者其他工程中用到的 jar 文件。

1.4.4、Maven 依賴搜索順序

當我們執行 Maven 構建命令時,Maven 會按照以下順序查找依賴的庫:
步驟 1 - 在本地倉庫中搜索,如果找不到,執行步驟 2,如果找到了則執行其他操作。
步驟 2 - 在中央倉庫中搜索,如果找不到,並且有一個或多個遠程倉庫已經設置,則執行步驟 4,如果找到了則下載到本地倉庫。
步驟 3 - 如果沒有設置遠程倉庫,Maven 將簡單的停滯處理並拋出錯誤(無法找到依賴的文件)。
步驟 4 - 在一個或多個遠程倉庫中搜索依賴的文件,如果找到則下載到本地倉庫,否則 Maven 將停止處理並拋出錯誤(無法找到依賴的文件)。

2、安裝

在官網(https://maven.apache.org/download.cgi)下載安裝包並解壓,然後配置環境變數即可;這裡使用 3.8.8 版本安裝部署。

2.1、Windows 安裝

這裡假設 Maven 的解壓目錄為:D:\apache\apache-maven-3.8.8,新建用戶變數 MAVEN_HOME

編輯用戶變數 Path,添加變數值:%MAVEN_HOME%\bin

打開 cmd,檢查安裝是否成功:

C:\Users\admin>mvn -version
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\apache\apache-maven-3.8.8
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: D:\soft\Java\jdk1.8.0_321\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

2.2、Linux 安裝

這裡假設 Maven 的解壓目錄為:/home/mongo/soft/apache-maven-3.8.8,編輯 ~/.bash_profile 設置環境變數:

export MAVEN_HOME=/home/mongo/soft/apache-maven-3.8.8
export PATH=$PATH:$MAVEN_HOME/bin

使配置生效:source ~/.bash_profile;然後檢查安裝是否成功:

app4:[/home/mongo] mvn -verion
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /home/mongo/soft/apache-maven-3.8.8
Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: /home/mongo/soft/jdk1.8.0_321/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

 

 

參考:https://www.runoob.com/maven/maven-tutorial.html。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] # 一、爬取目標 大家好,我是[@馬哥python說](https://www.zhihu.com/people/13273183132) ,一枚10年程式猿。 今天分享一期python爬蟲案例,爬取目標是大麥網近期演出活動:[- 大麥搜索](https://search.damai.c ...
  • # SQL join語法案例 Data: ```Plain Text order.txt order011,u001,300 order012,u002,200 order023,u006,100 order056,u007,300 order066,u003,500 order055,u004,3 ...
  • 某日二師兄參加XXX科技公司的C++工程師開發崗位第24面: > 面試官:`list`用過嗎? > > 二師兄:嗯,用過。 > > 面試官:請講一下`list`的實現原理。 > > 二師兄:`std::list`被稱為雙向鏈表,和C中手寫雙向鏈表本質上沒有大的區別。`list`對象中有兩個指針,一個 ...
  • 基於java線上零食超市系統設計與實現,可適用於零食小吃,線上零食小吃超市,線上超市,線上零食商城,美食商城,美食超市,校園超市,零食資訊等等。 ...
  • #### 前提: 1. linux環境下PHP有可用的Swoole擴展。 2. 9501埠可訪問。 #### 後端 ```php $value) { if (null $value) { $arr[$key] = ''; } if (is_array($value)) { $arr[$key] = ...
  • 文本文件可存儲的數據量是非常多的。每當需要分析或修改存儲在文件中的信息時,首先就是讀取文件到記憶體中,為此可以一次性讀取文件的全部內容,也可以以每次一行的方式逐步讀取。 # 1.讀取文件 ## 1.1讀取整個文件 要讀取文件,需要一個包含幾行文本的文件。下麵首先來創建一個poems文本文件,,裡面存儲 ...
  • 環境:Windows10_x64 Python版本 :3.9.2 sip協議提供了OPTIONS請求方法可用於探測對端狀態,今天記錄下Windows10環境下使用python3.9簡單實現sip協議的options功能(udp承載)的過程,並提供示例代碼及相關資源下載,可從如下渠道獲取: 關註微信公 ...
  • # 前言 本文主要是詳細講解在 Windows 11 系統上安裝 JDK 11,安裝時有一些註意事項需要說明。與 JDK 8 的安裝過程有少許不一樣。 # 一、安裝前說明 ## 1.系統要求 在微軟 Windows 11 平臺上安裝 JDK 11,首先我們看一下在64位 Windows 平臺上安裝 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...