nexus构件管理研究-关于nexus中有构件仓库中无法搜索到但是在指定构件的Browse Remote中可查到的原因分享

背景:

周五同事和我探讨一个话题,他在我们搭建的nexus仓库中搜到的slf4j版本是3.1(打个比方),位于代理的Central Repository,但是他需要的版本是3.2(打个比方), 但是此nexus中没有slf4j的3.2版本,但是当他点击进Central Repository并且选择browse Remote Index时候,却看到有3.2版本(和其他版本)的构件,为什么呢?

原因分析:

经过分析,我找到了原因,原来搜索仓库和点击某仓库选择browse Remote Index走的是不一样的机制。

对于仓库搜索,其等效于仓库查询:

其调用的请求是:http://localhost:8081/nexus/service/local/repositories?_dc=1416624550968 ,这个请求的响应入口在${bundleBaseDir}/nexus/WEB-INF/plugin-repository/nexus-restlet1x-plugin-2.10.0-02目录下的nexus-restlet1x-plugin-2.10.0-02.jar包中的RepositoryListPlexusResource类的get()方法:

其中listRepositories()方法定义在父类AbstractRepositoryPlexusResource中,它用于构造响应json payload.构造完响应对象就是每个被nexus代理的repository类的详细信息,为了突出重点,我这里只贴了一部分(比如代理的central repository的信息):

从这里看出,请求查看的配置URI是http://localhost:8081/nexus/service/local/repositories/central,它打开后是一个XML格式的仓库配置文件。而仓库中缓存的中央仓库的内容则可以通过contentResourceURI来访问。缓存的内容存储在nexus所在文件系统的effectiveLocalStorageUrl (即${bundleBasedir}/../sonatype-work /nexus/storage/{repositoryId}),缓存的内容所代理的真正远程仓库地址配置在remoteUri中。而我们知道,只有maven应用配置了指向本地仓库,当使用某构件时候,nexus发现自己没有,这才会从中央仓库下载指定的构件并且存储在storage子目录下。否则,它是绝对不会主动从远程仓库吧这些构件都下载到本地的(这个很容易想,因为代理的仓库都非常巨大,涉及构件多个版本,你总不能把自己搭的服务器去和真正远程仓库去比把,存储的数量级也不一样)。

实验也证实了我们这一点,比如刚安装的这个干净的nexus, 这个${bundleBasedir}/../sonatype-work /nexus/storage/{repositoryId})里面是没有具体的构件的,只有一个archetype-catalog.xml:

干净的nexus local 存储截图如下(以代理的repositoryId=central 为例):

这个archetype-catalog.xml只用于标示此仓库中构件的目录。

所以,我们相信,如果在nexus仓库中搜到了slf4j版本是3.1的构件,那么肯定我们有某个项目的<dependency>或者间接<dependency>中用到了这个构件,因此同事在构件仓库搜索中是搜到了这个构件的。但是因为从来没任何的项目用到slf4j版本是3.2的构件,所以构件仓库搜索中搜不到。

关于某仓库的“Browse Remote ”:

从web 客户端工具可以看出,它实际请求的URL是:

这个请求会被位于${bundleBaseDir}\nexus\WEB-INF\plugin-repository\nexus-rrb-plugin-2.10.0-02目录下的nexus-rrb-plugin-2.10.0-02中的RemoteBrowserResource类的get()方法所响应。

在get方法中,它会先获取repositoryId(比如我们例子中的id=central),接着调用getResourceStoreRequest(request)方法来获取remote的列表,它其中会调用getValidRemoteIPAddress(request))方法来获取真正要访问的远程IP地址,比如我们的central就是访问前面多次提到的repo1.maven.org。 所以这一步必需要联网,否则无法解析出repo1.maven.org. 比如我做了个实验,我故意吧网络断开,则当点击”Browse Remote”并刷新时,就无法显示结果:

所以我们相信,当我们点击central repository并且查看“browse remote"时候,在联网的情况下,他总能找到这个构件(比如例子中版本是3.2的 slf4j),因为你搜索的是中央仓库。

总结:

(1)对于在仓库浏览器中浏览或者搜索构件,其搜索的是存在nexus服务器本地${bundleBasedir}/../sonatype-work /nexus/storage目录下的构件,如果找不到就找不到了。这些构件当maven应用配置指向nexus地址,并且nexus在自己层面找不到构件,才从相应的所代理的远程仓库中下载构件,并且存入storage目录。

(2)对于点击某仓库,查看其"browse remote",则只要网络通,就总能看到某版本构件,因为你直接查看了远程仓库的构件索引。

时间: 2024-11-08 21:11:45

nexus构件管理研究-关于nexus中有构件仓库中无法搜索到但是在指定构件的Browse Remote中可查到的原因分享的相关文章

Maven之——Nexus权限管理与调度任务

Maven之--Nexus权限管理与调度任务 1.    Nexus的权限管理 出于安全性考虑.需要对Nexus仓库进行权限管理.比如只有管理员才能配置Nexus.某个项目组有特定的仓库.等等 2.    Nexus的访问控制模型 Nexus基于权限(Privilege)做访问控制的.一个用户可以被赋予一个或者多个角色.一个角色可以包含一个或者多个权限.还可以包含一个或者多个角色.用户必须拥有相应的角色继而拥有相应权限.才能做相应操作. Nexus预定义了三个用户.以admin登录.单击左边导航

构件工具Maven----坐标、依赖、仓库、生命周期的简单学习

这篇文章对Maven中几个比较重要的概念坐标.依赖.仓库.生命周期做一个简单的介绍. 1.关于Maven坐标 用来区别Maven世界中任何一个构件,Maven坐标的元素包括groupId.artifactId.version.packaging.classifier,只要我们提供正确的坐标就能够访问对应的构件. <groupId>org.springframework</groupId> //当前Maven项目隶属的实际项目,其下面可能按功能划分了很多子项目,spring-core

管理研究的测量方法和技术的读书笔记

测量的概述.测量是按照一定的法则.用数学方法对事物的属性进行描述的过程就是测量.测量的分类分为物理测量.社会测量.生理测量.心理测量.测量的要素有对象.法则.结果.对象是事物的属性和特征,法则是测量时所采用的规则或方法,结果描写事物属性的数字或符号. 量表的分类,量表分为名称量表.等级量表.等距量表.比率量表.产生量表的原因是间接,无法直接测量.相对,绝对零点是个什么状态,兴趣,态度|等距客观,测量的标准化问题,测量的过程保持一致性.管理研究测量的特殊性,这种特殊性表现在间接性.相对性.客观性.

android 内存管理研究

1. 内存管理基础知识 http://www.cnblogs.com/xingfuzzhd/p/3485924.html   1. mImageView.setImageResource(R.drawable.my_image); 这段代码会调用 BitmapFactory.decodeStream() 生成一个 Bitmap.所以不要以为它比自己创建 Bitmap 节省内存. 3.  实际测试: 我使用了多种调用图片的方法来测试: 第一种: // 直接载入资源 idImageView imag

分享《组织与管理研究的实证方法(第2版)》中文PDF

下载:https://pan.baidu.com/s/1WTJt0XqrSoo5AvRibkXMQQ 其他资料请见:http://blog.51cto.com/3215120 <组织与管理研究的实证方法(第2版)>中文PDF,带目录. 该书立足于思维方式.理论构建以及管理研究的全过程,介绍了组织与管理研究中的各种实证方法.经典书籍. PDF如图: 原文地址:http://blog.51cto.com/3215120/2309944

《组织与管理研究的实证方法(第2版)》中文PDF

下载:https://pan.baidu.com/s/1WTJt0XqrSoo5AvRibkXMQQ <组织与管理研究的实证方法(第2版)>中文PDF,带目录. 该书立足于思维方式.理论构建以及管理研究的全过程,介绍了组织与管理研究中的各种实证方法.经典书籍. PDF如图: 原文地址:http://blog.51cto.com/4820691/2311147

nexus配置https(在nexus上配置jks证书方式)

nexus配置https(在nexus上配置jks证书方式): cd /usr/local/nexus3/etc/ssl/ 将已有的.crt和.key证书文件转为p12格式: openssl pkcs12 -export -out keystore.pkcs12 -inkey ming.key -in ming.crt 设置密码 再将p12格式文件转为.jks格式: keytool -v -importkeystore -srckeystore keystore.pkcs12 -srcstore

推荐学习《组织与管理研究的实证方法(第2版)》中文PDF

在写文章论文时,会涉及到观点论证,需要掌握一些实证方法. 建议学习<组织与管理研究的实证方法(第2版)>,对管理研究中涉及的方法进行了介绍,例如实验室研究,二手数据的研究,实地研究等,这对方法论的整体和系统认识还是比较有帮助的. 在具体掌握研究方法的同时,这本书还是能够提供较好的指引,方法论所涉及的重难点在此书中都有提及,是一本很好的开阔视野的书. <组织与管理研究的实证方法(第2版)>严谨.规范.高质量的研究方法指南--<组织与管理研究的实证方法(第2版)>立足于思维

量化资料学习《Python与量化投资从基础到实战》+《量化交易之路用Python做股票量化分析》+《组织与管理研究的实证方法第2版》

我们需要利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,重点学习如何高效地利用Python解决投资策略问题,推荐学习<Python与量化投资从基础到实战>等电子资料. 学习<Python与量化投资从基础到实战>电子书,主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘.信号构建.策略构建.回测.策略分析等.<Python与量化投资>利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,并将重点介绍如何高效地利用P