查找工件是否存在于远程存储库中



如何使用gradle检查一个工件是否存在于远程存储库中?

我还没有找到任何gradle插件来完成这个。

我有一个在构建中创建一个函数的想法。检查存储库url是否存在的Gradle。但这似乎不是正确的做法。

Boolean ifExists = new URL(url).openConnection().with {
requestMethod = 'HEAD'
connect()
responseCode == 200
}

如有任何建议,不胜感激。

使用Kotlin DSL,您可以通过以下方式检查工件是否存在于任何已注册的存储库中:

import com.github.kittinunf.fuel.httpGet
buildscript {
dependencies {
"classpath"("com.github.kittinunf.fuel:fuel:2.3.1") // you may use any other HTTP-client if you want
}
}
tasks {
register("checkDependencies") {
doFirst {
project.configurations["implementation"].dependencies.forEach { dependency ->
project.repositories.forEach { repository ->
val repositoryURL = (repository as MavenArtifactRepository).url
val artifactURL = "$repositoryURL${dependency.group?.replace('.', '/')}/${dependency.name}/${dependency.version}/${dependency.name}-${dependency.version}.jar"
val (_, response, _) = artifactURL.httpGet().response()
println("$dependency: ${response.statusCode}")
}
}
}
}
}

似乎没有一个官方的Gradle插件来支持检查工件的存在。然而,你应该能够通过在Java进程中执行curl命令来实现这一点:旋度标志解释:

-仅标头。

s静音模式。(无程序计或错误信息)

如果您需要对工件资源进行身份验证,那么您的命令可能与下面的命令略有不同,但是我假设您已经在url中说明了这一点:

String curlCommand= "curl -I -s " + url + " | grep HTTP";
Process process = Runtime.getRuntime().exec(curlCommand);
process.getInputStream();

如果找到了您的工件,进程将打印"HTTP/1.1 200 OK"

否则,"HTTP/1.1 404 Not Found"

不确定这是否有帮助,https://github.com/ben-manes/gradle-versions-plugin。您可以重新连接以指定您想要丢弃的不稳定版本。

或通过始终查看最新版本来强制执行此操作https://github.com/patrikerdes/gradle-use-latest-versions-plugin