Maven使用筆記(通過編譯Flink的過程發現原來配置maven挺重要的)

前言:

今天在編譯Flink的時候,一直失敗,但是看網上的文章好像編譯挺簡單的,後來發現,其實是公司的網/國內的網不太行再加上我選擇的maven遠程倉庫上缺了一些package。

之前我使用的遠程倉庫是mvnrepository.com,國內訪問的速度還行,但是package不全。比較全的應該是中央倉庫,它的repository id 是central,這個是maven默認的,我們不必配置。但是國內訪問速度特別特別特別慢,基本下不動。因此最好能夠有個proxy。但是全走proxy也不太好,畢竟還是沒有直接走國內的那麼快。最理想的情況就是,大部分的包我都能通過阿里雲的maven倉下載,當阿里雲沒有這個包的時候,再走mvnrepository.com,還沒有的話再走中央倉。

如何設置呢?

首先我們要知道,maven幫我們尋找jar包時選擇的倉庫的順序。

maven搜索依賴的優先級:

本地倉庫 > settings文件中profile定義的倉庫 > 項目pom文件中profile標籤中定義的倉庫 > pom文件中repositories標籤定義的倉庫 > settings文件中定義的mirror鏡像 > 默認的central

mirror和repository是什麼關係?

mirror其實就是一個代替它所指定的repository的倉庫,mirror通過指定mirrorOf標籤的值(這個值就是repository的id,如果是*則表示所有repository)來代替一個存在的repository。假設有一個mirror,它的mirrorOf標籤的值是central,它表示,任何要到central的下載都不行了,要走mirror制定的url去下載,即使沒有mirror中沒有這個package,maven也不會再去central下載了,會導致jar包下載失敗。由於大部分的鏡像地址(包括maven.aliyun.com)中的package都不怎麼全,這就造成mirror這個配置有點雞肋了。

配置:

1. 我刪除了所有的mirror配置,並且在settings文件的profiles標籤中定義了兩個profile,一個是aliyun的倉庫,一個是mvnrepository.com的倉庫,aliyun放在第一位,因爲我想讓下載首先通過國內,mvnrepository放在第二個。結構如下:

  <profiles>
    <profile>
        <id>aliyun_profile</id>
        <repositories>
            <repository>
                <id>aliyun</id>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </snapshots>
            </repository>
        </repositories>
    </profile>
    <profile>
        <id>mvnrepository_profile</id>
        <repositories>
            <repository>
                <id>mvnrepository</id>
                <url>https://mvnrepository.com/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </snapshots>
            </repository>
        </repositories>
    </profile>
  </profiles>

  <!--激活profile-->
  <activeProfiles>
    <activeProfile>aliyun_profile</activeProfile>
    <activeProfile>mvnrepository_profile</activeProfile>
  </activeProfiles>

 

2. 因爲以上兩個倉庫還是不太全,所以還是需要最後走中央倉庫,因此,我在settings文件的proxies標籤中定義一個proxy,proxy要屏蔽掉阿里雲。

  <proxies>
   <proxy>
        <id>socks5</id>
        <active>true</active>
        <protocol>socks5</protocol>
        <host>127.0.0.1</host>
        <port>1080</port>
        <!--阿里雲的下載不要通過proxy-->
        <nonProxyHosts>*.aliyun.com*|172.*|10.*</nonProxyHosts>
   </proxy>

  </proxies>

如果proxy不生效,請檢查你的maven home目錄下的conf文件夾中settings文件是不是你的ide默認的配置settings文件。

在idea中使用的時候好像還是不生效,那就換個方法,在mvn clean install之前,先運行一下

export MAVEN_OPTS="-DproxySet=true -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080 -DnonProxyHosts=*aliyun.com*|172.*|10.*"

不想proxy的時候,就

export MAVEN_OPTS="-DproxySet=false"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章