2015-11-02 32 views
1

我有一个Java项目的Gradle构建脚本。我已经建立了一个内部的Artifactory存储库作为项目依赖项的一个远程。Gradle从未在JCenter存储库中解决Artifactory的相关性问题

当项目正在编译时,我希望Gradle先去Artifactory并请求;如果它在那里失败,它应该接下来尝试JCenter作为备份。

我在Gradle 2.8中使用了Gradle Artifactory插件v3.1.1。该插件定义了contextUrlpublish回购,并resolve在一个封闭回购:

artifactory { 
    contextUrl = "${artifactoryContextUrl}" 
    publish { 
     repository { 
      repoKey = 'Release' 
      username = "${artifactoryUser}" 
      password = "${artifactoryPassword}" 
      maven = true 
     } 
    } 
    resolve { 
     repository { 
      repoKey = 'repo' 
      username = "${artifactoryUser}" 
      password = "${artifactoryPassword}" 
      maven = true 
     } 
    } 
} 

无论是buildscript和项目定义其库:

buildscript { 
    repositories { 
     maven { 
      name 'Artifactory' 
      url "${artifactoryContextUrl}repo" 
      credentials { 
       username = "${artifactoryUser}" 
       password = "${artifactoryPassword}" 
      } 
     } 
     jcenter() 
    } 
} 

repositories { 
    maven { 
     name 'Artifactory' 
     url "${artifactoryContextUrl}repo" 
     credentials { 
      username = "${artifactoryUser}" 
      password = "${artifactoryPassword}" 
     } 
    } 
    jcenter() 
} 

我不得不求助于这些重复的语句反复定义Artifactory回购协议,因为我似乎无法找到一种方法来定义并将artifactory闭包放置在构建脚本中,以便Gradle在尝试JCenter之前引用此定义的resolve回购协议。

优选地,解决方案将解决两个buildscriptrepositories关闭此重复定义,但它似乎不太可能,我可以参考的属性artifactory瓶盖内安装了摇篮,Artifactory的插件之前。

回答

3
  1. 你并不需要同时artifactory {}配置和repositories配置在脚本中的主要部分。请使用repositories指向主要部分中的buildscript然后artifactory{} DSL中的Artifactory实例。
  2. 你不需要在你的脚本中配置jcenter,Artifactory默认代理它。您不需要使用JCenter“备份”Artifactory,因为JCenter中存在的任何内容始终可以从Artifactory中解析出来。
+0

1.我会测试一下。谢谢。 2.这个想法与jcenter备份引用是Artifactory在我们的防火墙后面运行。如果我们的Artifactory服务器不可用,那么将jcenter引用为备份。在这种情况下,Gradle不会尝试解析Artifactory,然后尝试JCenter。但是,通过Gradle中的jcenter引用,它似乎总是通过JCenter首先解决依赖关系,然后Artifactory(如果JCenter不可用)(我们自己的库中就是这种情况)。我们想要颠倒这个顺序,首先尝试Artifactory,然后尝试JCenter。 – AmundsenJunior

+0

快捷Artifactory是一个非常糟糕的主意。如果您担心Artifactory正在启动,您应该探索Artifactory的主动 - 主动和/或主动 - 被动部署,而不是在发生故障时将其缩短。 – JBaruch

+1

感谢您的部署信息。我们Artifactory的HA比一些Gradle解决方案更好的解决方案。 – AmundsenJunior