maven的仓库怎么配置(Maven仓库配置及远程依赖)

业务开发中我们可能涉及到私有包的概念 , 这一篇就看看私有仓库的相关概念以及如何使用这些私有仓库,现在小编就来说说关于maven的仓库怎么配置?下面内容希望能帮助到你,我们来一起看看吧!

maven的仓库怎么配置(Maven仓库配置及远程依赖)

maven的仓库怎么配置

一、前言

业务开发中我们可能涉及到私有包的概念 , 这一篇就看看私有仓库的相关概念以及如何使用这些私有仓库

私有仓库有2大方向 , 一个是通过阿里云的私有仓库来搭建自己的仓库 . 另外可以自行搭建仓库.

二、仓库概念

2.1 Maven仓库分类

Maven 仓库分为3个部分 : local 本地仓库 , central 中央仓库 , remote 远程仓库.

// Local Repository 通俗来说就是 .m2 文件夹(默认) 或者自定义配置的路径 , Maven 构建项目时 , 会自动将所有依赖项 Jar 下载到本地存储库中 // Central Repository 当 Maven 在本地存储库中找不到任何依赖项时,它就开始在中央存储库中进行搜索 - 中央仓库由Maven社区管理 - 默认配置 , 不需要额外进行配置 // 远程存储库 开发人员自己的定制存储库,包含所需的库或其他项目 jar , 可以在 Setting 或 pom 中进行配置

2.2 依赖搜索序列

既然存在3种不同的仓库 , 那么就存在优先级 :

  • Step 1 : 在本地存储库中搜索依赖项

  • Step 2 : 在中央存储库中搜索依赖项 , 如果没有配置远程库 , 则抛出异常

  • Step 3 : 如果配置了远程库 , 在远程存储库或存储库中搜索依赖项,

    三、通过阿里云配置远程仓库

    首先要了解云效这个工具 , 云效是阿里云开放的DevOps平台 , 其个人可以免费使用 , 包括代码管理和DevOps 持续发布的能力 , 同样远程仓库也基于该平台实现.

    四、自建 Maven 私库

    自建 Maven 仓库可以使用 Nexus 或者 JFROG-ARTIFACTORY ,这里展示一下安装的方式和图形界面.

    这里为了方便 , 这里直接用 Docker 进行安装

    // Docker docker pull sonatype/nexus3 // 创建容器卷 mkdir -p /docker/nexus/ chmod 755 /docker/nexus/ // 启动容器 docker run -d --restart always --name nexus3 -p 8081:8081 -v /docker/nexus:/var/nexus-data sonatype/nexus3

    修改密码及创建账号

    // S1 : 进入容器目录 docker exec -it d38ead7860f9 /bin/bash // S2 : 查看密码 cat /nexus-data/admin.password // S3 : 创建账号及权限 (见下图)

    五、简单得上传和下载

    Maven 私有库上传

    // S1 : Setting 文件中配置 Server <server> <id>antBalckRemote</id> <username>antblack</username> <password>123456</password> </server> // S2 : Pom 文件中配置 repository <distributionManagement> <repository> <id>antBalckRemote</id> <name>maven-nexus</name> <url>http://ip:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>antBalckRemote</id> <name>maven-nexus</name> <url>http://ip:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement> // 补充 : 常见问题 - timeout : 通常是 url 配置的不对 - 401 : 通常是 Server 配置的帐号密码权限问题 - 405 : 这里通常是配置的 repository 的问题 , 注意选择 Maven 仓库

    Maven 私有库下载

    // 私有库的下载主要在 Setting.xml 中配置, 这里先展示一种简单的方式 <profiles> <profile> <id>dev</id> <repositories> <repository> <id>group-maven</id> <name>group-maven</name> <url>http://ip:8081/repository/maven-releases/</url> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </releases> <snapshots> <enabled>false</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> <repository> <id>group-maven-snapshots</id> <name>group-maven-snapshots</name> <url>http://ip:8081/repository/maven-snapshots/</url> <releases> <enabled>false</enabled> <updatePolicy>always</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>dev</activeProfile> </activeProfiles>

    六、本地文件详情

    来关注一下这些文件有什么作用 :

    _remote.repositories

    - 从上面内容可以看到 , remote 库中存在文件 jar 和 pom - 该 repositories 用于标识下载文件的信息 // 例如 : (PS : 我配置了一个叫 group-maven 的 profile) demo-0.0.1-RELEASE.jar>group-maven= : 表示文件从 profiles > repository > group-maven 库中获取 // 复杂点 : (如果存在多行) 多了一行通常说明更换了新得远程源 ,且该数据源中存在文件

    lastUpdated

    如果更换了 Setting 文件 , 且新的远程库没有该资源 , 就会生成一个 xxx.lastUpdate 文件 lastUpdated 中通常包含这些信息 : http\://120.1.1.1\:8081/repository/maven-snapshots/.error= http\://packages.aliyun.com/maven/repository/123123-snapshot-LwE1yj/.error= http\://packages.aliyun.com/maven/repository/123123-snapshot-LwE1yj/.lastUpdated=1656339413777 http\://120.1.1.1\:8081/repository/maven-snapshots/.lastUpdated=1656339413466 在多仓库的环境下 , 分别从多个仓库中查找了依赖 , 如果查询失败 , 则会接 .error 后缀. // 重点 : 如果之前远程库由于某些原因 (权限 ,认证 , 异常) , 导致Jar拉取失败 , 则该文件会导致后续正常后跳过该远程仓库 (可以理解为排除 lastUpdate 中 error 的部分)

    七、其他几种配置多远程仓库的方式

    多库有多种配置方式 , 常见的两种主要是 : 代理模式 和 配置方式

    PS:云效远程仓库中需要通过仓库管理查看 Server 信息 (注意他把账号密码隐藏了,要点一下小眼睛)

    通过 Pom 文件中配置 repositories 进行处理

    <!-- S1 : 如果需要认证 , Setting 中配置对应的 Server --> <server> <id>rdc-releases</id> <username>123123123</username> <password>123123123]</password> </server> <!-- S2 : pom 文件中配置 repositories --> <repositories> <repository> <id>rdc-releases</id> <url>http://packages.aliyun.com/maven/repository/123-release-123123/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>antBalckRemote</id> <url>http://123.456.789.123:8081/repository/maven-snapshots/</url> </repository> </repositories>

    通过配置多 Profiles

    <profiles> <profile> <id>rdc</id> <repositories> <repository> <id>rdc-release</id> <name>rdc-release</name> <url>http://packages.aliyun.com/maven/repository/123-release-ABVCDSFA/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> <profile> <id>dev</id> <repositories> <repository> <id>group-maven-snapshots</id> <name>group-maven-snapshots</name> <url>http://123.123.123.123:8081/repository/maven-snapshots/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> </profiles> <servers> <server> <id>rdc-release</id> <username>...</username> <password>....</password> </server> <server> <id>antBalckRemote</id> <username>....</username> <password>.....</password> </server> </servers>

    通过 Mirror 进行镜像配置

    mirror 本质上并不能同时加载多个仓库内的文件 , 其本质上还是和 profile 进行配合使用

    <mirrors> <mirror> <id>aliyun</id> <mirrorOf>aliyun</mirrorOf> <url>http://repo.mycompany.com/proxy</url> </mirror> </mirrors>

    // 什么是镜像 ? 如果 X 中可以获取到 Y 库的所有包 , 则认定 X 是 Y的镜像. // 镜像的作用 ? 可以通过配置 mirror 把所有执行远程库的包指向镜像 // 如何映射 mirrorOf 进行映射 , 和 profile 中的 ID 进行匹配 // 不同 mirrorOf 的作用 ? - central : 为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像 - * : 该配置是所有Maven仓库的镜像 - repo1,repo2 : 匹配仓库repo1和repo2,使用逗号分隔多个远程仓库 - *,!repo1 : 匹配所有远程仓库,repo1除外 // 镜像的问题 - 由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库 // 多个 Mirror 的作用 虽然 mirrors 可以配置多个子节点,但是它只会使用其中的一个节点 , 只有当前一个 mirror 无法连接的时候,才会去找后一个 // 如何变相的做到多仓库 ? 1. 私库中代理中央仓库的目的 , 可以加快速度 , 同时可以拉取私库中不存在的公共包 2. 拉取时首先从私库处理 , 再从中央库拉取jar

    作者:AntBlack链接:http://juejin.cn/post/7114666430804525064来源:稀土掘金

  • 免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

      分享
      投诉
      首页