使用gradle,我有一个用动态版本声明的依赖项
ext {
fooLibVersion = [1.0.0, 1.0.999]
}
dependencies {
implementation "org.examble:foo-lib:$fooLibVersion"
}现在,我想创建我的项目的javadoc,其中包含到lib-foo javadoc的链接。
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/如何以编程方式获得foo-lib的解析版本(也称为“静态版本”)(用动态版本声明),并在javadoc link参数的变量部分使用它?
发布于 2020-08-04 11:12:04
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/"
)
}
}https://stackoverflow.com/questions/63235221
复制相似问题