深入講解Java Maven配置

由於maven 使用上手很容易所以很多時候可以囫圇吞棗能夠使用就可以瞭,由於作者最近在做的持續集成的代碼掃描的時候,發現私有雲裡面大型工程maven依賴,如果沒有弄清楚裡面的配置復雜的項目很難在私有環境裡面正常的編譯過。下面作者根據自己的經驗談談常用的配置的作用到底是什麼。

首先說明maven配置都是那些配置

1. pom.xml 配置

pom.xml 配置主要分為兩類,一類是用於配置自己的實際依賴, 二類僅僅用於聲明一些版本和倉庫便於版本管理和發佈。

在我們java工程裡面有一個pom.xml 這裡面主要配置工程的依賴庫,pom配置是可以被繼承的,如果是父級依賴一般是做版本控制以及指定私有倉庫的。如下圖: 下圖主要是展示父pom 主要作用是版本控制以及私有倉庫指定。

重點來瞭:

上圖repository的id的作用是啥(作者當時很是迷惑,可以亂寫那要id幹啥),這個id實際會和maven settings.xml 的配置文件裡面的mirrors 配置有關。

2. maven 的settings.xml

下面重點講一下settings的配置

如圖settings 主要有mirrors servers 和profiles 三部分組成。

a. mirrors

mirrors 主要作用是一個鏡像代理,便於內外網廠庫切換,或者單獨配置內網使用。

如果pom中的repository的id能和mirrorOf的值關聯上,那麼url以mirror的為準,否則以repository中自己的url為準。

<mirror>
      <id>test-nexus</id>
      <mirrorOf>*</mirrorOf>
      <name>sugon local repository</name>
      <url>http://172.22.5.34:9996/repository/sugoncloud-public/</url>
    </mirror>

mirrorof 有三種值:

* 代表 所有倉庫請求都走這個配置的鏡像代理。

central 默認是maven 的倉庫,如果其它鏡像訪問不到(這裡是服務訪問不到而不是沒有依賴包)。

其它: 比如test 、native-repo 這些關聯的是pom裡面配置的私有倉庫id。

b. servers

servers 裡面的配置 如下:

<server>
      <id>nexus-releases</id>  
      <username>deployment</username>  
      <password>deployment123</password>  
    </server>

這個配置的作用是它關聯pom裡面配置私有倉庫的id, 在推送依賴包的使用根據id作認證的。

c. profiles

profiles 主要是配置全局私用倉庫。就不詳解瞭,和pom類似配置如下:

 <profile>
      <id>nexus-aliyun</id>
      <repositories>
        <repository>
          <id>public</id>
          <name>Public Repositories</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
          <releases>
            <enabled>true</enabled>
          </releases>
        </repository>
		</repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>public</id>
          <name>Public Repositories</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public</url>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
          <releases>
            <enabled>true</enabled>
          </releases>          
        </pluginRepository>
      </pluginRepositories>
    </profile>

補充一個最重要的: 由於上文說到的父pom(版本控制) 子工程依賴就是依賴的父pom文件而不是jar包 如果隻配置mirrors 是不能拉取父pom文件的,如果需要拉取父pom文件那麼需要配置repository。

最後敬上參考地址:

Maven settings.xml中私有倉庫配置淺析 – 簡書

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: