Maven仓库配置及远程依赖

Maven仓库配置及远程依赖Maven 仓库分为 3 个部分 local 本地仓库 central 中央仓库 remote 远程仓库 其他几种配置多远程仓库的方式

欢迎大家来到IT世界,在知识的湖畔探索吧!

一、前言

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

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

二、仓库概念

2.1 Maven仓库分类

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

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

欢迎大家来到IT世界,在知识的湖畔探索吧!

2.2 依赖搜索序列

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

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

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

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

Maven仓库配置及远程依赖



欢迎大家来到IT世界,在知识的湖畔探索吧!

四、自建 Maven 私库

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

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

欢迎大家来到IT世界,在知识的湖畔探索吧!// 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
Maven仓库配置及远程依赖

修改密码及创建账号

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

五、简单得上传和下载

Maven 私有库上传

欢迎大家来到IT世界,在知识的湖畔探索吧!// S1 : Setting 文件中配置 Server <server> <id>antBalckRemote</id> <username>antblack</username> <password></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仓库配置及远程依赖

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>

六、本地文件详情

Maven仓库配置及远程依赖

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

_remote.repositories

欢迎大家来到IT世界,在知识的湖畔探索吧!- 从上面内容可以看到 , 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= https\://packages.aliyun.com/maven/repository/-snapshot-LwE1yj/.error= https\://packages.aliyun.com/maven/repository/-snapshot-LwE1yj/.lastUpdated=77 http\://120.1.1.1\:8081/repository/maven-snapshots/.lastUpdated=66 在多仓库的环境下 , 分别从多个仓库中查找了依赖 , 如果查询失败 , 则会接 .error 后缀. // 重点 : 如果之前远程库由于某些原因 (权限 ,认证 , 异常) , 导致Jar拉取失败 , 则该文件会导致后续正常后跳过该远程仓库 (可以理解为排除 lastUpdate 中 error 的部分)

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

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

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

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

欢迎大家来到IT世界,在知识的湖畔探索吧!<!-- S1 : 如果需要认证 , Setting 中配置对应的 Server --> <server> <id>rdc-releases</id> <username></username> <password>]</password> </server> <!-- S2 : pom 文件中配置 repositories --> <repositories> <repository> <id>rdc-releases</id> <url>https://packages.aliyun.com/maven/repository/123-release-/</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>https://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 进行配合使用

欢迎大家来到IT世界,在知识的湖畔探索吧!<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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/97576.html

(0)
上一篇 23小时前
下一篇 23小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信