(九)Maven坐標詳解

来源:http://www.cnblogs.com/AlanLee/archive/2016/12/10/6156268.html
-Advertisement-
Play Games

Maven的一個核心的作用就是管理項目的依賴,引入我們所需的各種jar包等。為了能自動化的解析任何一個Java構件,Maven必須將這些Jar包或者其他資源進行唯一標識,這是管理項目的依賴的基礎,也就是我們要說的坐標。包括我們自己開發的項目,也是要通過坐標進行唯一標識的,這樣才能才其它項目中進行依賴 ...


Maven的一個核心的作用就是管理項目的依賴,引入我們所需的各種jar包等。為了能自動化的解析任何一個Java構件,Maven必須將這些Jar包或者其他資源進行唯一標識,這是管理項目的依賴的基礎,也就是我們要說的坐標。包括我們自己開發的項目,也是要通過坐標進行唯一標識的,這樣才能才其它項目中進行依賴引用。

 

1.何為Maven坐標

 

關於坐標(Coordinate),大家最熟悉的應該就是數學中的坐標了吧,我印象不是特別深刻,說的數學專業一點叫作平面幾何。在一個平面坐標系中,有x軸和y軸,x軸就是橫線,y軸就是豎線,坐標(x,y)表示這個點距離x軸為y,距離y軸為x的一點,任何一個坐標都能唯一標識該平面中的一點。

 

在實際的生活中,我們可以將地址看成是一種坐標。不同的省,不同的市,不同的區,不同的街道等一系列信息標識了每一個不同的地址。在深圳經常吃外賣的人應該是有體會的,送外賣的小哥都會根據你填寫的地址將外賣送給你,而你填的地址就標識了唯一的一個地址。

 

坐標就好比每一個Java構件的身份證一樣。Maven的世界是擁有非常多的Java構件的,可能是jar、可能是war、也可能是其他的一些東西。假如Maven中沒有坐標的概念,我們是無法來區分這些構件的,所以我們要唯一標識每一個構件。不然就和傳統的手工方式一樣,你需要spring就去spring下載spring的包,需要mysql又去mysql下載mysql的包,沒有統一的規範又怎麼能夠自動化的去依賴這些構件。

 

Maven便給我們制定了一套規則那就是使用坐標進行唯一標識。Maven的坐標元素包括groupId、artifactId、version、packaging、classfier。只要我們提供正確的坐標元素,Maven就能找到對應的構件,首先去你的本地倉庫查找,沒有的話再去遠程倉庫下載。如果沒有配置遠程倉庫,會預設從中央倉庫地址(http://repo1.maven.org/maven2)下載構件,該中央倉庫包含了世界上大部分流行的開源項目構件,但不一定所有構件都有,我在以前的開發中就遇到過找不到oracle資料庫jar包的問題,不知道現在是否依然如此。

 

在我們自己開發項目的時候,也是要給我們的項目定義坐標的,這是強制性要求,只有這樣,其他項目才能引用該項目的構件。

 

2.坐標詳細說明

 

Maven坐標是通過groupId、artifactId、version、packaging、classfier這些元素來定義的,我們來看看示例:

 

 

我們在平時的開發中一般只需要使用必要的幾個元素就好了,不必要的一些元素往往是用不著的,我們來看看每個元素所代表的含義,前面也是有簡單的提到過的。

 

groupId :定義當前Maven項目隸屬的實際項目。首先,Maven項目和實際項目不一定是一對一的關係。比如SpringFrameWork這一實際項目,其對應的Maven項目會有很多,如spring-core,spring-context等。這是由於Maven中模塊的概念,因此,一個實際項目往往會被劃分成很多模塊。其次,groupId不應該對應項目隸屬的組織或公司。原因很簡單,一個組織下會有很多實際項目,如果groupId只定義到組織級別,而後面我們會看到,artifactId只能定義Maven項目(模塊),那麼實際項目這個層次將難以定義。最後,groupId的表示方式與Java包名的表達方式類似,通常與功能變數名稱反向一一對應。上例中,groupId為junit,是不是感覺很特殊,這樣也是可以的,因為全世界就這麼個junit,它也沒有很多分支。

 

artifactId : 該元素定義當前實際項目中的一個Maven項目(模塊),推薦的做法是使用實際項目名稱作為artifactId的首碼。比如上例中的junit,junit就是實際的項目名稱,方便而且直觀。在預設情況下,maven生成的構件,會以artifactId作為文件頭,如junit-3.8.1.jar,使用實際項目名稱作為首碼,就能方便的從本地倉庫找到某個項目的構件。

 

version : 該元素定義了使用構件的版本,如上例中junit的版本是3.8.1,你也可以改為4.0表示使用4.0版本的junit。

 

packaging :定義Maven項目打包的方式,使用構件的什麼包。首先,打包方式通常與所生成構件的文件擴展名對應,如上例中沒有packaging,則預設為jar包,最終的文件名為junit-3.8.1.jar。也可以打包成war等。

 

classifier: 該元素用來幫助定義構建輸出的一些附件。附屬構件與主構件對應,如上例中的主構件為junit-3.8.1.jar,該項目可能還會通過一些插件生成如junit-3.8.1-javadoc.jar,junit-3.8.1-sources.jar, 這樣附屬構件也就擁有了自己唯一的坐標。

 

上述5個元素中,groupId、artifactId、version是必須定義的,packaging是可選的(預設為jar),而classfier是不能直接定義的,需要結合插件使用。

 

大家可以發現一個構件的名稱就是由這幾個元素的值所組成的,junit-3.8.1.jar,自己去比對一下,不僅如此,Maven倉庫的佈局也是基於Maven坐標的,大家可以看看本地倉庫的佈局是否如此。

 

理解了Maven坐標以後,大家就能夠開始去學習Maven的依賴管理了。


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

-Advertisement-
Play Games
更多相關文章
  • Matlab7.0安裝完成後打開就立即關閉,此時右鍵點擊MATLAB7.0快捷方式-“用圖形處理器運行”-“更改預設圖形處理器”,將“集成圖形”設置成預設: 點擊MATLAB7.0快捷方式將顯示: 然後將視窗關閉,在桌面找到MATLAB快捷方式將游標移動到該快捷方式,右鍵查看該快捷方式的“相容性”, ...
  • Error occurred computing Git commit diffsMissing unknown 0000000000000000000000000000000000000000 commit操作時,出現如上錯誤 ...
  • Java里的攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中攔截器... ...
  • ...
  • 前段時間寫了幾個PHP的腳本,但是因為腳本的項目是基於composer安裝的,給別人使用的時候不太方便,就希望能夠打包成一個能直接使用的文件。 搜索了一下,發現可以使用phar打包。 假設我們有如下一個項目 入口文件是index.php,打包前的命令如下: 再添加打包腳本之前,需要先修改一下PHP的 ...
  • 緩存的意思是中間存儲,相當於中轉站,積累一定的貨物,再往目的地運送。如果沒有中轉站,就會出現一件一件的運送,耗費大量的人力物力。 緩存的基類是:Buffer 緩存的基本子類有:Char/Byte/Short/Int/Long/Float/Double + Buffer 緩存一般用一個數組做存儲,ar ...
  • 實在搞不定博客園的排版,排版更佳的版本在:https://zhuanlan.zhihu.com/p/24162430 Life is short, you need Python 人生苦短,我用Python -- Bruce Eckel 5.1 Python簡介 本章將介紹Python的最基本語法, ...
  • 這裡使用了 python 的基本代碼實現了 Linux 系統下 wc 命令程式的基本功能。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...