Как получить разрешенную версию (stati c version) из зависимости с версией Dynami c программно в build.gradle? - PullRequest
0 голосов
/ 03 августа 2020

Используя gradle, у меня объявлена ​​зависимость с динамической c версией

ext {
    fooLibVersion = [1.0.0, 1.0.999]   
}
dependencies {
    implementation "org.examble:foo-lib:$fooLibVersion"
}

Теперь я хочу создать javado c своего проекта со ссылками на lib-foo javado c, для этого у меня есть

javadoc {
    …
    options {
        links = [
            "https://example.org/foo-lib/releases/$fooLibVersion/javadoc/"
        ]
    }
}

Однако это, конечно, не сработает с

javadoc: error - Malformed URL: https://example.org/foo-lib/releases/[1.0.0, 1.0.999]/javadoc/

Как я могу программно получить разрешенную версию, IINM также называется «stati c version» , of foo-lib (который был объявлен с версией Dynami c) и использовать его в переменной части аргумента javado c link?

1 Ответ

0 голосов
/ 04 августа 2020

Gradle, похоже, не предлагает чистого способа сделать это из коробки. Например (Kotlin DSL), получение ссылки на фактическую зависимость не приводит к разрешенной версии:

val commonsLangVersion by extra { listOf("3.9", "3.10") }

dependencies {
    implementation("org.apache.commons:commons-lang3:$commonsLangVersion")
}

configurations.compileClasspath.get().allDependencies.find { it.name == "commons-lang3" }?.let {
    println(it)
}

Результаты в:

$ ./gradlew build

> Configure project :
DefaultExternalModuleDependency{group='org.apache.commons', name='commons-lang3', version='[3.9, 3.10]', configuration='default'}

Итак, единственный способ получить фактическая версия должна разрешить конфигурацию, а затем выполнить некоторые манипуляции с подстрокой на основе имени файла:

val commonsLangVersion by extra { listOf("3.9", "3.10") }

dependencies {
    implementation("org.apache.commons:commons-lang3:$commonsLangVersion")
}

val resolvedVersion = configurations.compileClasspath.get().resolve()
        .filter { it.name.startsWith("commons-lang3") }[0] // commons-lang3-3.10.jar
        .name.substringAfterLast("-") // 3.10.jar
        .substringBeforeLast(".") // 3.10

println(resolvedVersion)

tasks.javadoc {
    options {
        (this as StandardJavadocDocletOptions)
        links = listOf(
                "https://commons.apache.org/proper/commons-lang/javadocs/api-$resolvedVersion/"
        )
    }
}
...