App下載

關(guān)于Maven管理jar包依賴出現(xiàn)的問(wèn)題 以及Maven倉(cāng)庫(kù)的配置方法

猿友 2021-07-30 14:15:01 瀏覽數(shù) (3190)
反饋

現(xiàn)在很多 Java 程序員都是直接用 IDEA 來(lái)創(chuàng)建 Maven 項(xiàng)目,但是應(yīng)用 Maven 的過(guò)程,多多少少會(huì)碰到一下問(wèn)題。下面,我將簡(jiǎn)單為大家說(shuō)一下在使用 Maven 管理 jar 包依賴,會(huì)遇到的一些情況,以及如何使用配置 Maven 的倉(cāng)庫(kù)。

在項(xiàng)目中使用Maven管理jar包依賴,往往會(huì)出現(xiàn)以下?tīng)顩r:

1、國(guó)內(nèi)訪問(wèn)maven默認(rèn)遠(yuǎn)程中央鏡像特別慢;

2、使用阿里的鏡像替代遠(yuǎn)程中央鏡像;

3、阿里云鏡像中缺少部分jar包;

4、同時(shí)使用私有倉(cāng)庫(kù)和公有倉(cāng)庫(kù);

針對(duì)以上情況,我們就需要讓Maven支持多倉(cāng)庫(kù)配置。

單獨(dú)倉(cāng)庫(kù)配置

當(dāng)只配置一個(gè)倉(cāng)庫(kù)時(shí),操作比較簡(jiǎn)單,直接在Maven的settings.xml文件中進(jìn)行全局配置即可,以阿里云的鏡像為例:

<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

只用新增一個(gè)mirror配置即可。要做到單一倉(cāng)庫(kù),設(shè)置mirrorOf到*。

mirrorOf中配置的星號(hào),表示匹配所有的artifacts,也就是everything使用這里的代理地址。上面的mirrorOf配置了具體的名字,指的是repository的名字。

鏡像配置說(shuō)明:

1、id: 鏡像的唯一標(biāo)識(shí);

2、name: 名稱描述;

3、url: 地址;

4、mirrorOf: 指定鏡像規(guī)則,什么情況下從鏡像倉(cāng)庫(kù)拉取。其中,
*: 匹配所有,所有內(nèi)容都從鏡像拉??;

external:*: 除了本地緩存的所有從鏡像倉(cāng)庫(kù)拉?。?/p>

repo,repo1: repo或者repo1,這里的repo指的倉(cāng)庫(kù)ID;

*,!repo1: 除了repo1的所有倉(cāng)庫(kù);

多倉(cāng)庫(kù)配置

那么針對(duì)多倉(cāng)庫(kù)的配置是否再多配置幾個(gè)mirror就可以了?如此配置并不會(huì)生效。

正確的操作是在profiles節(jié)點(diǎn)下配置多個(gè)profile,而且配置之后要激活。

<profiles>
    <profile>
      <id>boundlessgeo</id> 
      <repositories>
        <repository>
          <id>boundlessgeo</id> 
          <url>https://repo.boundlessgeo.com/main/</url> 
          <releases>
            <enabled>true</enabled>
          </releases> 
          <snapshots>
            <enabled>true</enabled> 
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile>
    <profile>
      <id>aliyun</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>maven-central</id> 
      <repositories>
        <repository>
          <id>maven-central</id> 
          <url>http://central.maven.org/maven2/</url> 
          <releases>
            <enabled>true</enabled>
          </releases> 
          <snapshots>
            <enabled>true</enabled> 
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile>
<profiles>

通過(guò)配置activeProfiles子節(jié)點(diǎn)激活:

<activeProfiles>
    <activeProfile>boundlessgeo</activeProfile>
    <activeProfile>aliyun</activeProfile>
    <activeProfile>maven-central</activeProfile>
</activeProfiles>

此時(shí)如果是在Idea中使用了本地的Maven配置,那么在項(xiàng)目的Maven管理中會(huì)看到類似如下圖中的profile選項(xiàng)。

打包時(shí),勾選所使用的profile即可。如果使用Maven命令打包執(zhí)行命令格式如下:

mvn -Paliyun ...

1.如果aliyun倉(cāng)庫(kù)的id設(shè)置為central,則會(huì)覆蓋maven里默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù)。

2.aliyun的倉(cāng)庫(kù)也可以不用配置,直接在mirrors標(biāo)簽內(nèi)配置一個(gè)鏡像倉(cāng)庫(kù),mirrors鏡像倉(cāng)庫(kù)mirrorOf的值設(shè)置為central,則也可以實(shí)現(xiàn)覆蓋默認(rèn)的倉(cāng)庫(kù)。

項(xiàng)目中配置鏡像

在項(xiàng)目中添加多個(gè)倉(cāng)庫(kù),是通過(guò)修改項(xiàng)目中的pom文件實(shí)現(xiàn)的。

思路:在項(xiàng)目中pom文件的repositories節(jié)點(diǎn)(如果沒(méi)有手動(dòng)添加)下添加多個(gè)repository節(jié)點(diǎn),每個(gè)repository節(jié)點(diǎn)是一個(gè)倉(cāng)庫(kù)。

配置效果如下:

<!-- 特殊maven倉(cāng)庫(kù) -->
<repositories>
    <repository>
        <id>central-repo1</id>
        <name>Maven Repository Switchboard</name>
        <url>http://repo1.maven.org/maven2/</url>
        <layout>default</layout>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

這里的id就是mirrorOf要使用的ID。

在實(shí)踐的過(guò)程中發(fā)現(xiàn)單單配置該倉(cāng)庫(kù)配置并不會(huì)生效,需要同時(shí)在setting.xml中定義一個(gè)mirrorOf為central-repo1的倉(cāng)庫(kù)配置,與該配置的id對(duì)照。

setting.xml中的對(duì)照配置如下:

<mirror>
    <id>central</id>
    <name>Maven Repository Switchboard</name>
    <url>https://repo1.maven.org/maven2/</url>
    <mirrorOf>central-repo1</mirrorOf>
</mirror>

值得收藏的國(guó)內(nèi)鏡像

<mirrors>
     <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/mvn/view</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>jboss-public-repository-group</id>
        <mirrorOf>central</mirrorOf>
        <name>JBoss Public Repository Group</name>
        <url>http://repository.jboss.org/nexus/content/groups/public</url>
    </mirror>
    <mirror>
        <id>ibiblio</id>
        <mirrorOf>central</mirrorOf>
        <name>Human Readable Name for this Mirror.</name>
        <url>https://maven.aliyun.com/mvn/view</url>
    </mirror>
    <mirror>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <url>http://repo1.maven.org/maven2/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>repo2</id>
        <mirrorOf>central</mirrorOf>
        <name>Human Readable Name for this Mirror.</name>
        <url>http://repo2.maven.org/maven2/</url>
    </mirror>
</mirrors>

到這里,這篇關(guān)于 Maven 項(xiàng)目中管理 jar 包依賴會(huì)遇到哪一些狀況,以及如何配置 Maven 項(xiàng)目中的倉(cāng)庫(kù)的內(nèi)容就介紹完了,想要了解更多相關(guān) Maven 項(xiàng)目的其他內(nèi)容,可以在W3Cschool站內(nèi)搜索相關(guān)技術(shù)文章,希望本篇文章能夠?qū)Υ蠹业膶W(xué)習(xí)有所幫助。


0 人點(diǎn)贊