Skip to main content

Artifactory - Get Artifact URL for Gradle dependencies

Ayman Patel

Ayman Patel

Back End Engineer @ Mastercard

What?

JFrog dropping support for artifacts

So What?

All builds with repositories {...} which fetches from jcenter() artifactory URL will fail from May 1st.

Now What?

Since gradle build --scan publishes to Gradle Repo, need a Task/Script to get URLs of dependencies.

build.gradle.getURLofDependencyArtifact:

task getURLofDependencyArtifact() {
doFirst {
project.configurations.compile.dependencies.each { dependency ->
for (ArtifactRepository repository : project.repositories.asList()) {
def url = repository.properties.get('url')
//https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar
def jarUrl = String.format("%s%s/%s/%s/%s-%s.jar", url.toString(),
dependency.group.replace('.', '/'), dependency.name, dependency.version,
dependency.name, dependency.version)
try {
def jarfile = new URL(jarUrl)
def inStream = jarfile.openStream();
if (inStream != null) {
println(String.format("%s:%s:%s", dependency.group, dependency.name, dependency.version)
+ " -> " + jarUrl)
return
}
} catch (Exception ignored) {
}
}
}
}
}

NOTE: Gives local .m2 URL as well as only for root (and not transitive dependencies) defined in build.gradle