Maven配置多仓库无效?来看看这篇文章

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Maven配置多仓库无效?来看看这篇文章

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


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


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


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


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


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


单独仓库配置

当只配置一个仓库时,操作比较简单,直接在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>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>

通过配置activeProfiles子节点激活:

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

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

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


mvn -Paliyun ...

1

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


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


项目中配置镜像

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


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


配置效果如下:


<!-- 特殊maven仓库 -->
<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。

在实践的过程中发现单单配置该仓库配置并不会生效,需要同时在setting.xml中定义一个mirrorOf为central-repo1的仓库配置,与该配置的id对照。

setting.xml中的对照配置如下:

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

值得收藏的国内镜像

<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>
相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Java Maven 数据安全/隐私保护
弄懂maven仓库 & 仓库优先级 & settings & pom配置关系及差异
弄懂maven仓库 & 仓库优先级 & settings & pom配置关系及差异
3375 1
|
Java
Mac下安装JDK11(国内镜像)
Mac下安装JDK11(国内镜像)
7369 0
Maven之阿里云镜像仓库配置
方式一:全局配置可以添加阿里云的镜像到maven的setting.xml配置中,这样就不需要每次在pom中,添加镜像仓库的配置,在mirrors节点下面添加子节点: <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.
|
缓存 运维 负载均衡
阿里云云效操作报错合集之在获取Maven私有库配置出错,该如何操作
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
24093 0
|
消息中间件 监控 负载均衡
中间件RabbitMQ性能瓶颈
【7月更文挑战第13天】
740 11
|
应用服务中间件 网络安全 nginx
docker 搭建 最新版本的 gitlab,使用HTTPS访问,以及gitlab的基础使用讲解
docker 搭建 最新版本的 gitlab,使用HTTPS访问,以及gitlab的基础使用讲解
|
JavaScript 前端开发
location.href和 window.location的区别有这些!
location.href和 window.location的区别有这些!
3454 3
|
缓存 Java Maven
Maven找不到依赖终极解决方案
Maven找不到依赖终极解决方案
1646 0
|
Java Maven
maven配置阿里云镜像源
maven配置阿里云镜像源
40191 1