Dependencies 使用gradle解决代理存储库上的常春藤依赖关系会导致资源丢失

Dependencies 使用gradle解决代理存储库上的常春藤依赖关系会导致资源丢失,dependencies,gradle,ivy,nexus,Dependencies,Gradle,Ivy,Nexus,我们使用nexus pro作为主存储库,nexus pro作为从存储库,设置了一种主从存储库方法,在这种方法中,我们的快照和发布存储库配置为代理(此外,还使用sonatype nexus的smartproxy技术) 我们的项目是基于Gradle和Ivy的多项目构建。我们使用动态版本(例如1++)来定义和解决依赖关系 问题是无法在代理上解决工件,该代理已正确发布到主存储库,但未转发到从属(代理)存储库(例如,由于网络问题或在发布给定工件后可以设置从属存储库) 正如我发现的(请参阅),gradle依

我们使用nexus pro作为主存储库,nexus pro作为从存储库,设置了一种主从存储库方法,在这种方法中,我们的快照和发布存储库配置为代理(此外,还使用sonatype nexus的smartproxy技术)

我们的项目是基于Gradle和Ivy的多项目构建。我们使用动态版本(例如1++)来定义和解决依赖关系

问题是无法在代理上解决工件,该代理已正确发布到主存储库,但未转发到从属(代理)存储库(例如,由于网络问题或在发布给定工件后可以设置从属存储库)

正如我发现的(请参阅),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)
如果我把它称为主回购协议,它当然会起作用

我现在的问题是:有人有任何线索,为什么不能通过代理在主机上解决这个问题,通常它应该这样做

谢谢,
Fred

Nexus代理存储库填充其本地磁盘存储,以响应远程服务器上的文件请求。只有通过代理请求的文件存储在其磁盘缓存中

因此,通过代理通过目录列表进行解析不会很好地工作


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

谢谢你的回复。问题是,正如您所提到的,smartproxy功能既不适用于尚未下载到代理的工件,也不适用于网络连接中断并导致代理上缺少工件的工件。既然我们有这个问题,我们想用最少的努力来解决这个问题。不幸的是,nexus代理上的工件解析似乎不支持以这种方式列出的常春藤项目,而普通的garden maven回购代理则支持。这不好。