maven如何配置多个仓库(包括最常用的)

在项目中使用Maven管理jar包依赖,往往会出现以下状况:

1、国内访问maven默认远程中央镜像特别慢;

2、使用阿里的镜像替代远程中央镜像;

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

4、同时使用私有仓库和公有仓库;

针对以上情况,我们就需要让Maven支持多仓库配置。

常用仓库

1 阿里中央仓库(首选推荐)

<repository>  
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository> 

2 camunda.com 中央仓库(第2推荐使用)

<repository>  
    <id>activiti-repos2</id>  
    <name>Activiti Repository 2</name>  
    <url>https://app.camunda.com/nexus/content/groups/public</url>  
</repository>  

3 alfresco.com 中央仓库(第3推荐使用)

<repository>  
    <id>activiti-repos</id>  
    <name>Activiti Repository</name>  
    <url>https://maven.alfresco.com/nexus/content/groups/public</url>  
</repository>  

4 github.com 中央仓库(需要x墙)

<repository>   
    <id>thinkgem-repos2</id>   
    <name>ThinkGem Repository 2</name>  
    <url>https://raw.github.com/thinkgem/repository/master</url>  
</repository>  

5 Google 中央仓库(需要x墙)

<repository>
    <id>google</id>
    <name>Google Repository</name>
    <url>https://maven.google.com</url>
</repository>

6 Maven官方中央仓库(需要x墙) 

<repository>
    <id>central</id>
    <name>Maven Central</name>
    <url>https://repo.maven.apache.org/maven2/</url>
</repository>

单独仓库配置

当只配置一个仓库时,操作比较简单,直接在Maven的settings.xml文件中进行全局配置即可,以阿里云的镜像为例:

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

只用新增一个mirror配置即可。要做到单一仓库,设置mirrorOf到*。

mirrorOf中配置的星号,表示匹配所有的artifacts,也就是everything使用这里的代理地址。上面的mirrorOf配置了具体的名字,指的是repository的名字。

镜像配置说明:

1、id: 镜像的唯一标识;

2、name: 名称描述;

3、url: 地址;

4、mirrorOf: 指定镜像规则,什么情况下从镜像仓库拉取。其中, *: 匹配所有,所有内容都从镜像拉取;

external:*: 除了本地缓存的所有从镜像仓库拉取;

repo,repo1: repo或者repo1,这里的repo指的仓库ID;

*,!repo1: 除了repo1的所有仓库;

多仓库配置

那么针对多仓库的配置是否再多配置几个mirror就可以了?如此配置并不会生效。

正确的操作是在profiles节点下配置多个profile,而且配置之后要激活。

<profiles>
    <profile>
        <id>aliyun</id>
        <repositories>
            <repository>
                <id>alimaven</id>
                <name>Aliyun Maven</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            </repository>
        </repositories>
    </profile>

    <profile>
        <id>activiti-repos</id>
        <repositories>
            <repository>
                <id>activiti-repos2</id>
                <name>Activiti Repository 2</name>
                <url>https://app.camunda.com/nexus/content/groups/public</url>
            </repository>
            <repository>
                <id>activiti-repos</id>
                <name>Activiti Repository</name>
                <url>https://maven.alfresco.com/nexus/content/groups/public</url>
            </repository>
        </repositories>
    </profile>

    <profile>
        <id>central-repos</id>
        <repositories>
            <repository>
                <id>central-repos</id>
                <name>Central Repository</name>
                <url>http://repo.maven.apache.org/maven2</url>
            </repository>
            <repository>
                <id>central-repos1</id>
                <name>Central Repository 2</name>
                <url>http://repo1.maven.org/maven2/</url>
            </repository>
        </repositories>
    </profile>

    <profile>
        <id>thinkgem-repos</id>
        <repositories>
            <repository>
                <id>thinkgem-repos</id>
                <name>ThinkGem Repository</name>
                <url>http://git.oschina.net/thinkgem/repos/raw/master</url>
            </repository>
            <repository>
                <id>thinkgem-repos2</id>
                <name>ThinkGem Repository 2</name>
                <url>https://raw.github.com/thinkgem/repository/master</url>
            </repository>
        </repositories>
    </profile>

    <profile>
        <id>google-repo</id>
        <repositories>
            <repository>
                <id>google</id>
                <name>Google Repository</name>
                <url>https://maven.google.com</url>
            </repository>
        </repositories>
    </profile>

    <!-- Add Official Central Repository -->
    <profile>
        <id>official-central-repo</id>
        <repositories>
            <repository>
                <id>central</id>
                <name>Official Maven Central</name>
                <url>https://repo.maven.apache.org/maven2</url>
            </repository>
        </repositories>
    </profile>
</profiles>

通过配置activeProfiles子节点激活:

<activeProfiles>
    <activeProfile>aliyun</activeProfile>
    <activeProfile>activiti-repos</activeProfile>
    <activeProfile>central-repos</activeProfile>
    <activeProfile>thinkgem-repos</activeProfile>
    <activeProfile>google-repo</activeProfile>
    <activeProfile>official-central-repo</activeProfile> <!-- 添加官方中央仓库 -->
</activeProfiles>

此时如果是在Idea中使用了本地的Maven配置,那么在项目的Maven管理中会看到类似如下图中的profile选项。

打包时,勾选所使用的profile即可。如果使用Maven命令打包执行命令格式如下:

mvn -Paliyun ...

1.如果aliyun仓库的id设置为central,则会覆盖maven里默认的远程仓库。

2.aliyun的仓库也可以不用配置,直接在mirrors标签内配置一个镜像仓库,mirrors镜像仓库mirrorOf的值设置为central,则也可以实现覆盖默认的仓库。

项目中配置镜像

在项目中添加多个仓库,是通过修改项目中的pom文件实现的。

思路:在项目中pom文件的repositories节点(如果没有手动添加)下添加多个repository节点,每个repository节点是一个仓库。

配置效果如下:

<repositories>
    <repository>
        <id>alimaven</id>
        <name>Aliyun Maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </repository>
    <repository>
        <id>activiti-repos2</id>
        <name>Activiti Repository 2</name>
        <url>https://app.camunda.com/nexus/content/groups/public</url>
    </repository>
    <repository>
        <id>activiti-repos</id>
        <name>Activiti Repository</name>
        <url>https://maven.alfresco.com/nexus/content/groups/public</url>
    </repository>
    <repository>
        <id>central-repos</id>
        <name>Central Repository</name>
        <url>http://repo.maven.apache.org/maven2</url>
    </repository>
    <repository>
        <id>central-repos1</id>
        <name>Central Repository 2</name>
        <url>http://repo1.maven.org/maven2/</url>
    </repository>
    <repository>
        <id>thinkgem-repos</id>
        <name>ThinkGem Repository</name>
        <url>http://git.oschina.net/thinkgem/repos/raw/master</url>
    </repository>
    <repository>
        <id>thinkgem-repos2</id>
        <name>ThinkGem Repository 2</name>
        <url>https://raw.github.com/thinkgem/repository/master</url>
    </repository>
    <repository>
        <id>google</id>
        <name>Google Repository</name>
        <url>https://maven.google.com</url>
    </repository>
</repositories>

值得收藏的国内镜像

<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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值