iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
Software Development

我們與Maven的距離系列 第 10

Day09 - Repository and setting.xml

  • 分享至 

  • xImage
  •  

前言

當你專案有了需求,就會去找合適的工具不要重複造輪子,此時我們常會google看看有沒有人寫過,找到了就到Maven Repository搜尋看看,把Maven座標貼在你的POM檔裡面,用IDE Reload你的Maven Project,然後你的套件就下載完成了,很神奇的是你都沒設定就有套件可以用了,這是因為default套件下載路徑被設定在Super Pom中,如果我們想要修改它則須設定在setting.xml中,讓我們娓娓道來吧

Maven Repository

Repository可以分為以下幾個類型
https://ithelp.ithome.com.tw/upload/images/20250924/20128084mVWHK41LPt.png

Logcal Repository

指的是本機存放jar套件的repository,預設路徑會放置在user目錄下.m2/repostory/

Central Repository

因為Maven執行需要一個默認可以使用中央倉庫,我們可以在先前介紹的Super POM可以看到設定(maven-model-builder-3.0.jar/org/apache/maven/model/pom-4.0.0.xml)
https://ithelp.ithome.com.tw/upload/images/20250924/20128084exNf76Pdyt.png

Private Repository

大部份的公司會自建自己私有的Repository,通常會這樣做的原因在於

  1. 加快自家專案的構建
  2. 部署不能公開的第三方套件在自家Repository
  3. 避免各自專案都去Central重複下載套件
  4. 過濾審核外部套件

Public Repository

常見的幾個公開Repository如下

  • Google:https://maven.google.com/
  • RedHat:https://repository.jboss.com/maven2/
  • Alibaba:https://maven.aliyun.com/nexus/content/groups/public

setting.xml

通常我們不會把Local Repository設定在user目錄下的.m2/repostory/,習慣上不會放在與作業系統安裝的C槽下,所以我們會透過設置setting.xml修改Local Repository的路徑,你可以設置在下面其中一個地方,其中User的預設是需要自己建立的

  • global settings:apache-maven-3.9.11/conf
  • user-specific settings:${user.home}/.m2
    global settings會影響該台電腦所有使用者,user下的則是會影響當前使用者,大家按需修改即可

Local Repository修改

maven很貼心先幫你註解起來,只需要解開註解設定成自己要的路徑即可

  <localRepository>H:\Java\maven_repository</localRepository>

Remote Repository修改

我們透過mirro這個鏡像標籤進行修改,mirrorOf對應的就是針對要反射的repository id進行反射,也就是說當要求去central這個id的repository撈取套就都會被導到alibaba的這個位置

  <mirrors>
    <mirror>
      <id>alibaba</id>
      <name>alibaba Repository</name>
      <url>https://maven.aliyun.com/nexus/content/groups/public</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>

然後我們在我們的測試專案執行command

mvn package

就會發現它從alibaba下載了
https://ithelp.ithome.com.tw/upload/images/20250924/20128084Wh4WujMFE2.png
day09_repository_setting_03

情境題1.你的Jar檔無法從maven中下載該怎麼辦

筆者曾經遇到Vaddin的一個套件無法從maven central下載,操作結果如下
https://ithelp.ithome.com.tw/upload/images/20250924/201280843ZV7PtX6m2.png
在Local Repository看不到對應的Jar
https://ithelp.ithome.com.tw/upload/images/20250924/20128084mAY2WCH9jF.png
此時就需要去Vaddin官網去找該套件該如何下載
https://ithelp.ithome.com.tw/upload/images/20250924/20128084tWjJgOmOkq.png
將repository設置在你專案的pom.xml中

 <repositories>
     <repository>
      <id>Vaadin Directory</id>
      <url>https://maven.vaadin.com/vaadin-addons</url>
    </repository>
  </repositories>

執行完command就會發現下載成功了
https://ithelp.ithome.com.tw/upload/images/20250924/20128084LnHfMKy15g.png

情境題2.公司只允許你從公司的私有Repository下載套件,帳號密碼該如何設置

我們可以在maven conf資料夾下的setting.xml中設定repository並於server標籤中設定server資訊,如果還需要對密碼加密可以參考官網設定

  <mirrors>
    <mirror>
      <id>company-repo</id>
      <mirrorOf>*</mirrorOf>   <!-- 攔截所有 repository,包括 central -->
      <url>https://maven.mycompany.com/repository/maven-public/</url>
    </mirror>
  </mirrors>
  <servers>
    <server>
      <id>company-repo</id>         <!-- 這個 id 之後要跟 repository 對應 -->
      <username>你的帳號</username>
      <password>你的密碼</password>
    </server>
  </servers>

情境題3.公司網路是透過Proxy Server怎麼設定

筆者未遇到此問題這個部分可以參考官網的設定

情境題4.執行Maven Command時出現PKIX Exception如何處理

  1. 這個有可能發生在你連線公司私有repository使用公司自簽的憑證,又或者你連線maven central時因公司網際網路連線安全設備在maven網站憑證中加入了自簽憑證,此時需要的是將網站的憑證鍊完整匯出,匯入到你maven使用Java的keystore中
  2. 官網使用的是將憑證存到trust.jks中,再將它設定到環境變數中MAVEN_OPTS指定憑證路徑

小結

今日大致介紹了Local Repository與Remote Repository並介紹在上班可能在使用Maven常見的問題,如果還想知道更詳盡setting.xml可以如何設定可以參考官網

Reference


上一篇
Day08 - Standard Layout and Super POM
系列文
我們與Maven的距離10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言