1
我有一个Java项目的Gradle构建脚本。我已经建立了一个内部的Artifactory存储库作为项目依赖项的一个远程。Gradle从未在JCenter存储库中解决Artifactory的相关性问题
当项目正在编译时,我希望Gradle先去Artifactory并请求;如果它在那里失败,它应该接下来尝试JCenter作为备份。
我在Gradle 2.8中使用了Gradle Artifactory插件v3.1.1。该插件定义了contextUrl
,publish
回购,并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
回购协议。
优选地,解决方案将解决两个buildscript
和repositories
关闭此重复定义,但它似乎不太可能,我可以参考的属性artifactory
瓶盖内安装了摇篮,Artifactory的插件之前。
1.我会测试一下。谢谢。 2.这个想法与jcenter备份引用是Artifactory在我们的防火墙后面运行。如果我们的Artifactory服务器不可用,那么将jcenter引用为备份。在这种情况下,Gradle不会尝试解析Artifactory,然后尝试JCenter。但是,通过Gradle中的jcenter引用,它似乎总是通过JCenter首先解决依赖关系,然后Artifactory(如果JCenter不可用)(我们自己的库中就是这种情况)。我们想要颠倒这个顺序,首先尝试Artifactory,然后尝试JCenter。 – AmundsenJunior
快捷Artifactory是一个非常糟糕的主意。如果您担心Artifactory正在启动,您应该探索Artifactory的主动 - 主动和/或主动 - 被动部署,而不是在发生故障时将其缩短。 – JBaruch
感谢您的部署信息。我们Artifactory的HA比一些Gradle解决方案更好的解决方案。 – AmundsenJunior