我们有一个主从存储库方法,nexus pro作为主服务器,nexus pro作为slave,我们的快照和发布存储库配置为代理(此外还使用sonatype nexus的smartproxy技术) .
我们的项目是一个基于Gradle和Ivy的多项目构建 . 我们使用动态版本(例如1.)来定义和解决依赖关系 .
问题是无法在代理上解析工件,该代理正确地发布到主存储库并且没有转发到从属(代理)存储库(例如,由于网络问题或从属存储库可以在发布给定的工件之后设置) .
正如我发现的那样(参见docu in gradle),gradle依赖关系解析器使用目录列表:
如果依赖项被声明为动态版本(如1.),Gradle会将其解析为存储库中最新的可用静态版本(如1.2) . 对于Maven存储库,这是使用maven-metadata.xml文件完成的,而对于Ivy存储库,这是通过目录列表完成的 .
不幸的是,由于该工件和目录结构不可用,因此解析过程失败 . 调用 gradle --info --refresh-dependencies
结果
Executing task ':resolve' (up-to-date check took 0.001 secs) due to:
Task has not declared any outputs.
Resource missing. [HTTP GET: http://proxy/nexus/content/repositories/testrepo/com/company/smpro/test/SmartproxyTest/]
:resolve FAILED
:resolve (Thread[main,5,main]) completed. Took 0.668 secs.
我原本以为Nexus正在解析主设备上的URL,工件列表可以通过目录列表获得,但事实并非如此 . 如果我把上面的URL放到浏览器中,我会得到404:
404 - ItemNotFoundException
Request is marked as local-only, remote access not allowed from M2Repository(id=testrepo)
如果我在主仓库上调用它,它当然是有效的 .
我现在的问题是:有没有任何线索,为什么这不能通过代理在主服务器上解决,它应该通常做什么?
谢谢,弗雷德
1 回答
Nexus代理存储库填充其本地磁盘存储,以响应对远程文件的请求 . 只有通过代理请求的文件才存储在磁盘缓存中 .
因此,通过代理目录列表的解决方案不会很好地工作 .
从您的请求路径看,您可能正在使用Nexus Professional智能代理功能 . 如果是这样,您可以通过在代理的“智能代理”选项卡中选择“立即下载更新的工件”来部分解决此问题 . 这对于尚未下载的工件不起作用 .