Maven(項目管理和LINUX)

目錄

一、整合IDEA

二、POM模型

三、依賴和繼承關系

依賴(Dependency)

依賴的基本結構

依賴傳遞性

依賴管理

繼承(Inheritance)

繼承的基本結構

繼承的特性

四、插件的使用

五、私服的使用


一、整合IDEA

在Maven項目中整合IntelliJ IDEA(通常簡稱為IDEA)是相對簡單的。以下是一些基本步驟,幫助你設置和配置Maven項目在IDEA中:

  1. 安裝和配置Maven
    • 首先,確保你已經安裝了Maven,并配置了MAVEN_HOME環境變量和PATH變量中的Maven可執行文件路徑。
    • 驗證Maven安裝是否成功,可以在命令行中輸入mvn -v
  2. 創建或導入Maven項目
    • 如果你還沒有Maven項目,你可以使用Maven的mvn archetype:generate命令來創建一個新的Maven項目,或者使用IDEA的“New Project”向導,并選擇“Maven”作為項目SDK。
    • 如果你已經有了一個Maven項目,你可以通過IDEA的“Import Project”功能來導入它。選擇項目的根目錄(包含pom.xml文件的那個目錄)。
  3. 配置IDEA的Maven設置
    • 打開IDEA的設置(Preferences)或(Settings)。
    • 導航到“Build, Execution, Deployment” > “Build Tools” > “Maven”。
    • 在這里,你可以配置Maven的Home Directory(指向你的Maven安裝目錄),User settings file(指向你的settings.xml文件,如果有的話),以及有效的Maven倉庫位置。
  4. 加載和解析Maven項目
    • 一旦你導入了Maven項目,IDEA會自動加載和解析pom.xml文件,下載所有必要的依賴項,并構建項目結構。
    • 你可以通過右側的Maven工具窗口來管理項目的生命周期階段(如clean、compile、install等)。
  5. 編寫和構建代碼
    • 現在你可以在IDEA中編寫代碼了。IDEA提供了豐富的代碼編輯、自動補全、重構和調試功能。
    • 當你想構建項目時,只需點擊Maven工具窗口中的“Lifecycle”部分,然后選擇適當的階段(如“install”或“package”)。
  6. 運行和調試
    • IDEA允許你運行和調試Maven項目中的Java應用程序、JUnit測試等。只需右鍵點擊你想要運行的類或方法,并選擇“Run”或“Debug”即可。
  7. 使用IDEA的Maven插件
    • IDEA有許多與Maven集成的插件和工具,可以幫助你更有效地管理項目。例如,你可以使用“Maven Projects”工具窗口來查看和管理項目的依賴關系、插件和配置。
    • 你還可以使用IDEA的Maven插件來自動導入Maven依賴項、更新項目結構、運行Maven命令等。
  8. 配置和使用Maven Wrapper
    • Maven Wrapper是一個很好的工具,它可以確保項目在任何環境中都使用正確版本的Maven來構建。你可以通過在項目中添加Maven Wrapper來利用這一功能。一旦添加了Wrapper,IDEA將自動使用它來構建項目。
  9. 持續集成和持續部署(CI/CD)
    • 如果你打算將項目與CI/CD工具(如Jenkins、Travis CI等)集成,Maven和IDEA的組合將為你提供一個強大的起點。你可以使用Maven來定義項目的構建和部署流程,并使用IDEA來開發和測試代碼。然后,你可以將Maven命令配置到CI/CD工具中,以實現自動化構建和部署。

二、POM模型

在Maven中,pom.xml?文件是項目的核心配置文件,它包含了項目的對象模型(Project Object Model,簡稱POM),用于描述項目的構建方式、依賴關系、插件配置等信息。POM模型是一個XML文檔,它定義了一個Maven項目的基本屬性和配置。

以下是pom.xml文件中通常包含的一些主要元素和它們的描述:

  1. modelVersion:POM模型的版本,通常是?4.0.0

  2. groupId:項目的組ID,通常用于標識項目的歸屬組織或項目本身。

  3. artifactId:項目的唯一標識符,通常是項目的名稱或模塊名稱。

  4. version:項目的版本號。

  5. packaging:項目的打包方式,如?jarwarear?等。

  6. name(可選):項目的顯示名稱,常用于Maven生成的文檔。

  7. url(可選):項目的URL地址。

  8. description(可選):項目的描述信息。

  9. licenses(可選):項目的許可證信息。

  10. developers(可選):項目的開發者信息。

  11. scm(可選):項目的源代碼管理信息,如Git、SVN等。

  12. issueManagement(可選):項目的問題跟蹤系統信息。

  13. ciManagement(可選):項目的持續集成系統信息。

  14. dependencies:項目的依賴關系列表。每個依賴關系通常包括?groupIdartifactIdversion?元素,以及可選的?type?和?scope?元素。

  15. build:項目的構建配置,如源代碼目錄、編譯插件配置、輸出目錄等。

    • plugins:項目使用的插件列表。
    • resources:資源文件(如配置文件)的配置。
    • sourceDirectory:源代碼目錄。
    • testSourceDirectory:測試代碼目錄。
    • directory:構建輸出目錄。
  16. profiles(可選):項目的配置文件集,用于定義不同的構建環境(如開發環境、測試環境、生產環境)下的不同配置。

  17. repositories?和?pluginRepositories(可選):項目的依賴倉庫和插件倉庫配置,用于定義從哪里下載項目的依賴和插件。

  18. modules(可選):如果是多模塊項目,用于定義子模塊列表。

  19. properties(可選):項目的屬性配置,可以在整個POM中通過?${property.name}?的方式引用。

  20. distributionManagement(可選):項目的發布管理配置,包括發布到Maven倉庫的配置。

通過pom.xml文件,Maven能夠自動下載和管理項目的依賴,執行項目的構建生命周期(如編譯、測試、打包、部署等),并生成相應的文檔和報告。這使得Maven成為一個強大的項目管理工具,廣泛應用于Java項目中。

三、依賴和繼承關系

在Maven中,依賴(Dependency)和繼承(Inheritance)是兩個非常重要的概念,它們允許你更高效地管理項目的構建和依賴關系。

1.依賴(Dependency)

在Maven中,依賴是指一個項目(或模塊)所依賴的其他庫或項目。這些依賴項被定義在pom.xml文件的<dependencies>標簽中。Maven會自動下載這些依賴項,并將它們包含在項目的構建路徑中。

依賴的基本結構

<dependencies>  <dependency>  <groupId>groupId</groupId>  <artifactId>artifactId</artifactId>  <version>version</version>  <!-- 可選的依賴范圍 -->  <scope>scope</scope>  <!-- 可選的依賴類型 -->  <type>type</type>  <!-- 可選的依賴是否可選 -->  <optional>true/false</optional>  </dependency>  <!-- 其他依賴... -->  
</dependencies>
  • groupId:依賴項的組織ID。
  • artifactId:依賴項的唯一標識符。
  • version:依賴項的版本號。
  • scope:依賴項的作用范圍(如compile、test、runtime等)。
  • type:依賴項的類型(默認為jar)。
  • optional:標記該依賴是否可選,默認為false。

依賴傳遞性

Maven的一個強大特性是依賴的傳遞性。如果一個項目A依賴于項目B,而項目B又依賴于項目C,那么項目A會自動繼承項目B對項目C的依賴(除非顯式地排除了它)。

依賴管理

在父POM中,你可以使用<dependencyManagement>標簽來聲明依賴項,但不實際包含它們。這允許你在子模塊中繼承這些依賴項的配置,而無需在每個子模塊的POM中重復聲明它們。

2.繼承(Inheritance)

在Maven中,你可以使用繼承來減少POM文件中的重復配置。通過創建一個父POM(通常包含公共配置和依賴項),其他POM可以繼承這個父POM的配置。

繼承的基本結構

在子模塊的pom.xml文件中,使用<parent>標簽來指定父POM:

<parent>  <groupId>groupId</groupId>  <artifactId>artifactId</artifactId>  <version>version</version>  <!-- 可選的父POM的相對路徑(如果父POM不在Maven倉庫中) -->  <relativePath/>  
</parent>
  • groupIdartifactId?和?version:用于標識父POM。
  • relativePath(可選):如果父POM不在Maven倉庫中,可以指定其相對于當前POM的路徑。

繼承的特性

  • 子模塊可以繼承父POM中的<groupId><version><description><url><dependencies><dependencyManagement><build><reporting><pluginRepositories><properties>等元素。
  • 子模塊可以覆蓋從父POM繼承的任何元素。
  • 依賴的傳遞性也適用于繼承。如果父POM聲明了一個依賴項,并且子模塊沒有覆蓋它,那么這個依賴項將自動被包含在子模塊中。

通過使用依賴和繼承,Maven允許你更有效地組織和管理項目的構建和依賴關系,從而提高開發效率。

四、插件的使用

Maven中的插件為開發者提供了強大的構建和部署工具,允許他們執行各種項目相關的任務,如編譯、測試、打包、部署等。以下是Maven插件使用的一些基本步驟和概念:

  1. 插件定義
    pom.xml文件中,你可以在<build>元素下的<plugins>元素中定義插件。每個插件都由<groupId><artifactId><version>來唯一標識。版本號通常是可選的,如果不指定,Maven會嘗試從倉庫中獲取最新版本。

<build>  <plugins>  <plugin>  <groupId>groupId</groupId>  <artifactId>artifactId</artifactId>  <version>version</version>  <!-- 插件配置 -->  <configuration>  <!-- 配置項 -->  </configuration>  </plugin>  <!-- 其他插件... -->  </plugins>  
</build>
  1. 插件配置
    插件的配置是在<configuration>元素中進行的。不同的插件有不同的配置項,這些配置項用于定義插件的行為和參數。
  2. 插件目標(Goals)
    插件目標(Goals)是插件提供的具體任務或操作。你可以通過Maven命令行工具(如mvn)來執行這些目標。例如,mvn clean命令會執行maven-clean-plugin插件的clean目標,用于清理項目構建產生的文件。
  3. 插件生命周期
    Maven具有多個生命周期,如cleandefaultsite等。每個生命周期都包含一系列的階段(Phases),而每個階段都與一個或多個插件目標相關聯。當你執行一個Maven生命周期階段時,Maven會按照順序執行與該階段相關聯的所有插件目標。
  4. 自定義插件
    除了使用Maven倉庫中的現成插件外,你還可以根據自己的需要開發自定義插件。自定義插件需要遵循Maven的插件開發規范,并使用Maven插件開發工具包(Maven Plugin API)進行開發。
  5. 常用插件示例
    • maven-compiler-plugin:用于編譯Java源代碼。
    • maven-surefire-plugin:用于執行JUnit或TestNG等測試框架的測試用例。
    • maven-jar-plugin:用于將編譯后的Java類打包成JAR文件。
    • maven-war-plugin:用于將Web應用程序打包成WAR文件。
    • maven-deploy-plugin:用于將項目構建的輸出部署到遠程倉庫。
    • spring-boot-maven-plugin:Spring Boot項目的默認打包工具,用于將Spring Boot應用程序打包成可執行的JAR或WAR文件。
  6. 插件使用技巧
    • 查閱官方文檔:了解插件的詳細用法、配置項和示例。
    • 搜索網絡資源:通過搜索引擎或Maven倉庫搜索插件的相關信息。
    • 嘗試和調試:在項目中嘗試使用插件,并根據需要進行調試和修改配置。
    • 自定義插件:如果現有插件無法滿足你的需求,可以考慮開發自定義插件。

五、私服的使用

Maven中的私服(也稱為Maven私有倉庫)主要用于企業或組織內部開發團隊,它是一個集中式的artifact(構件)存儲與分發系統。以下是Maven私服的主要用途和使用場景:

  1. 內部項目部署:一些無法從外部倉庫下載的構件,例如內部的項目,可以部署到私服上,以便供其他依賴項目使用。
  2. 節省帶寬和時間:在局域網內架設一個私有的倉庫服務器,用它代理所有外部的遠程倉庫。當本地Maven項目需要下載構件時,首先去私服請求,如果私服沒有,則再去遠程倉庫請求。從遠程倉庫下載構件后,會把構件緩存在私服上。這樣,即使沒有Internet鏈接,由于私服已經緩存了大量構件,整個項目還是可以正常使用的。同時,也降低了中央倉庫的負荷。
  3. 依賴查找和下載邏輯
    • 當用戶需要某個構件時,首先會檢查本地倉庫是否已經存在所需構件。如果本地倉庫中已經有所需構件,系統將直接從本地倉庫獲取,無需進行遠程請求。
    • 如果本地倉庫中不存在所需構件,用戶的請求將轉向Maven私服。Maven私服會檢查自身的倉庫,如果存在所需構件,將其下載到本地倉庫,并返回給用戶。
    • 如果Maven私服也沒有所需構件,系統將嘗試從外部的遠程倉庫(通常是中央倉庫)中獲取。如果外部遠程倉庫存在所需構件,Maven私服會將該構件下載并緩存到自身的倉庫中,然后將構件返回給用戶。
  4. 多模塊項目:在大型項目中,開發人員較多,如果每個人都去遠程倉庫將依賴下載到本地,那么對公司的帶寬會造成很大的壓力。因此,可以在公司的局域網內部搭建一臺服務器(即私服),開發人員所有的依賴都從這臺服務器中去訪問。如果該服務器中也沒有該依賴,那么該服務器就去遠程倉庫查找,然后下載到該服務器,最后再返回給開發者。

總的來說,Maven私服為企業或組織內部開發團隊提供了一個高效、便捷的依賴管理和分發解決方案。


文章制作不易,如果有幫助的話,還希望能給個點贊關注支持一下,謝謝大家!🙏🙏🙏

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12462.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于springboot的醫院管理系統源碼數據庫

基于springboot的醫院管理系統源碼數據庫 隨著信息互聯網信息的飛速發展&#xff0c;醫院也在創建著屬于自己的管理系統。本文介紹了醫院管理系統的開發全過程。通過分析企業對于醫院管理系統的需求&#xff0c;創建了一個計算機管理醫院管理系統的方案。文章介紹了醫院管理系…

玩轉Matlab-Simscape(初級)- 06 - 基于Solidworks、Matlab Simulink、COMSOL的協同仿真(理論部分2)

** 玩轉Matlab-Simscape&#xff08;初級&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的協同仿真&#xff08;理論部分2&#xff09; ** 目錄 玩轉Matlab-Simscape&#xff08;初級&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的協同仿真&am…

風電功率預測 | 基于GRU門控循環單元的風電功率預測(附matlab完整源碼)

風電功率預測 風電功率預測 | 基于GRU門控循環單元的風電功率預測(附matlab完整源碼)完整代碼風電功率預測 | 基于GRU門控循環單元的風電功率預測(附matlab完整源碼) 完整代碼 clc; clear close allX = xlsread(風電場預測.xlsx)

python數據分析——seaborn繪圖2

參考資料&#xff1a;活用pandas庫 # 導入庫 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns tipspd.read_csv(r"...\seaborn常用數據案例\tips.csv") print(tips.head()) 1、成對關系表示 當數據大部分是數據時&#xff0c;可以使用…

分享一個基于Qt的Ymodem的上位機(GitHub開源)

文章目錄 1.項目地址2.Ymodem 協議介紹3.文件傳輸過程4.使用5.SecureCRT 軟件也支持Ymodem6.基于PyQt5的Ymodem界面實現案例 1.項目地址 https://github.com/XinLiGH/SerialPortYmodem 基于VS2019 Qt5.15.2 編譯&#xff0c;Linux下編譯也可以&#xff0c;這里不做說明。 2.…

Python | Leetcode Python題解之第89題格雷編碼

題目&#xff1a; 題解&#xff1a; class Solution:def grayCode(self, n: int) -> List[int]:ans [0] * (1 << n)for i in range(1 << n):ans[i] (i >> 1) ^ ireturn ans

如何在云電腦實現虛擬應用—數據分層(應用分層)技術簡介

如何在云電腦實現虛擬應用—數據分層&#xff08;應用分層&#xff09;技術簡介 近幾年虛擬化市場實現了非常大的發展&#xff0c;桌面虛擬化在企業中應用越來越廣泛&#xff0c;其擁有的如下優點得到大量企業的青睞&#xff1a; 數據安全不落地。在虛擬化環境下面數據保存在…

STL庫簡介

一、STL庫的概念 STL&#xff1a;是C標準庫的重要追組成部分&#xff0c;不僅是一個可以復用的組件庫&#xff0c;而且還是一個包含了數據結構和算法的軟件框架。 二、STL的版本 原始版本 Alexander Stepanov、 Meng Lee 在惠普實驗室完成的原始版本&#xff0c; 是一個開源…

JVM 雙親委派機制詳解

文章目錄 1. 雙親委派機制2. 證明3. 優勢與劣勢 1. 雙親委派機制 類加載器用來把類加載到 Java 虛擬機中。從JDK1.2版本開始&#xff0c;類的加載過程采用雙親委派機制&#xff0c;這種機制能更好地保證 Java 平臺的安全。 1.定義 如果一個類加載器在接到加載類的請求時&…

react組件渲染性能優化之函數組件-useCallback使用

useCallback主要就是對函數進行緩存,useCallBack這個Hooks主要是解決React.memo不能緩存事件的問題 useCallBack(fn, dependencies) &#xff1a;fn想要緩存的函數&#xff0c;dependencies有關是否更新 fn 的所有響應式值的一個列表 比如&#xff1a;UseCallBackOptimize組件…

(done) NLP+HMM 協作,還有維特比算法

參考視頻&#xff1a;https://www.bilibili.com/video/BV1aP4y147gA/?p2&spm_id_frompageDriver&vd_source7a1a0bc74158c6993c7355c5490fc600 &#xff08;這實際上是 “序列標注任務”&#xff09; HMM 的訓練和預測如下圖 訓練過程&#xff1a;我們首先先給出一個語…

做一個桌面懸浮翻頁時鐘

毛玻璃效果翻頁桌面懸浮時鐘&#xff0c;TopMost&#xff08;Topmost“True”&#xff09;&#xff0c;不在任務欄顯示&#xff08;ShowInTaskbar“False”&#xff09;&#xff0c;在托盤區顯示圖標&#xff0c;雙擊托盤區圖標實現最小化和還原&#xff0c;右鍵托盤圖標可選“…

常見網絡攻擊及解決方案

網絡安全是開發中常常會遇到的情況&#xff0c;為什么會遇到網絡攻擊&#xff0c;網絡攻擊是如何進行的&#xff0c;如何抵御網絡攻擊&#xff0c;都是我們需要思考的問題。 為什么會遇到網絡攻擊&#xff1f; 以下是一些主要的因素&#xff1a; 技術漏洞&#xff1a;軟件或操…

web學習記錄--(5.14)

1.Sublime安裝與漢化 直接點擊windows即可下載&#xff0c;安裝即可 Thank You - Sublime Text 漢化 Install Package ChineseLocalzation 2.PHPstorm下載以及激活,漢化 直接下載&#xff0c;然后找激活碼激活即可 漢化 plugins&#xff08;插件&#xff09;/chinese&…

SpringBoot接收參數的19種方式

https://juejin.cn/post/7343243744479625267?share_token6D3AD82C-0404-47A7-949C-CA71F9BC9583

未授權訪問:ZooKeeper 未授權訪問漏洞

目錄 1、漏洞原理 2、環境搭建 3、未授權訪問 防御手段 今天繼續學習各種未授權訪問的知識和相關的實操實驗&#xff0c;一共有好多篇&#xff0c;內容主要是參考先知社區的一位大佬的關于未授權訪問的好文章&#xff0c;還有其他大佬總結好的文章&#xff1a; 這里附上大…

在Ubuntu中如何解壓zip壓縮包??

2024年5月15日&#xff0c;周三上午 使用 unzip 命令 unzip 文件名.zip這會將壓縮包中的內容解壓到當前目錄。如果想解壓到特定目錄&#xff0c;可以使用 -d 選項&#xff0c;例如&#xff1a; unzip 文件名.zip -d 目標目錄使用 7-zip 還可以安裝 7-zip 工具來解壓 ZIP 文件。…

【Python探索之旅】冒泡排序(三種方法)

前言 算法步驟&#xff1a; 代碼實現 方法一、嵌套循環 方法二 while循環 方法三、使用生成器表達式 解釋&#xff1a; 時間復雜度&#xff1a; 完結撒花 前言 冒泡排序是一種簡單的排序算法&#xff0c;它也是一種穩定排序算法。其實現原理是重復掃描待排序序列&#xf…

2025年第十一屆北京國際印刷技術展覽會

2025年第十一屆北京國際印刷技術展覽會 展覽時間&#xff1a;2025年5月15-19日 展覽地點&#xff1a;北京中國國際展覽中心&#xff08;順義館&#xff09; 主辦單位&#xff1a;中國印刷及設備器材工業協會中國國際展覽中心集團有限公司 承辦單位&#xff1a;北京中印協華港國…

海思Hi3065H 200MHz 高性能 RISCV32 A2 MCU

這是一款海思自研的RISCV32內核的高性能實時控制專用MCU&#xff0c; 具有高性能、高集成度、高可靠性、易開發的特點&#xff0c;同時還有嵌入式AI能力。 CPU ? RISC-V200MHzFPU 存儲 ? Up to 152KB Code Flash ? 8KB Data Flash ? 16KB SRAM 個人認為這是MCU梯隊非常…