首页 文章

使用gradle解析代理存储库上的ivy依赖项会导致资源缺失

提问于
浏览
1

我们有一个主从存储库方法,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 回答

  • 1

    Nexus代理存储库填充其本地磁盘存储,以响应对远程文件的请求 . 只有通过代理请求的文件才存储在磁盘缓存中 .

    因此,通过代理目录列表的解决方案不会很好地工作 .

    从您的请求路径看,您可能正在使用Nexus Professional智能代理功能 . 如果是这样,您可以通过在代理的“智能代理”选项卡中选择“立即下载更新的工件”来部分解决此问题 . 这对于尚未下载的工件不起作用 .

相关问题