Gradle - 获取依赖项工件的URL

Han*_*ans 10 gradle

我想在Gradle拥有所有可用的依赖项工件之后手动下载依赖项工件,因此我想获取Gradle用来下载这些工件的URL.

有没有办法获取Gradle已下载工件的依赖关系的URL?

Mik*_*keM 7

使用 Gradle 6.0 或更高版本,输出 URL 的另一种方法是混合--refresh-dependencies--info

\n
// bash/terminal\n./gradlew --info --refresh-dependencies\n// cmd\ngradlew --info --refresh-dependencies\n
Run Code Online (Sandbox Code Playgroud)\n

或输出到文件

\n
// bash/terminal\n./gradlew --info --refresh-dependencies > urls.txt\n// cmd\ngradlew --info --refresh-dependencies > urls.txt\n
Run Code Online (Sandbox Code Playgroud)\n

注意--refresh-dependencies

\n
\n

\xe2\x80\x99 认为使用 --refresh-dependencies\n 将强制下载依赖项是一种常见的误解。情况并非如此:Gradle 将\n仅执行刷新动态依赖项所严格要求的操作。这可能涉及下载新的列表或元数据文件,甚至工件,但如果没有任何改变,影响是最小的。

\n
\n

来源: https: //docs.gradle.org/current/userguide/dependency_management.html

\n

另请参阅:如何强制 gradle 重新下载依赖项?

\n


小智 6

以 gson 为例:

dependencies {
    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    compile 'com.google.code.gson:gson:2.8.6'
}
Run Code Online (Sandbox Code Playgroud)

创建一个打印 url 的任务:

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) {
                }
            }
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

./gradlew getURLofDependencyArtifact

任务:getURLofDependencyArtifact

com.google.code.gson:gson:2.8.6 -> https://jcenter.bintray.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar

PS:结果依赖你的项目

repositories {
    jcenter()
    mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)

所以,结果可能是:

任务:getURLofDependencyArtifact

com.google.code.gson:gson:2.8.6 -> https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar