首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在build.gradle中以编程方式获取动态版本依赖的解析版本(静态版本)?

如何在build.gradle中以编程方式获取动态版本依赖的解析版本(静态版本)?
EN

Stack Overflow用户
提问于 2020-08-04 02:46:29
回答 1查看 52关注 0票数 0

使用gradle,我有一个用动态版本声明的依赖项

代码语言:javascript
运行
复制
ext {
    fooLibVersion = [1.0.0, 1.0.999]   
}
dependencies {
    implementation "org.examble:foo-lib:$fooLibVersion"
}

现在,我想创建我的项目的javadoc,其中包含到lib-foo javadoc的链接。

代码语言:javascript
运行
复制
javadoc {
    …
    options {
        links = [
            "https://example.org/foo-lib/releases/$fooLibVersion/javadoc/"
        ]
    }
}

然而,这当然会失败,因为

代码语言:javascript
运行
复制
javadoc: error - Malformed URL: https://example.org/foo-lib/releases/[1.0.0, 1.0.999]/javadoc/

如何以编程方式获得foo-lib的解析版本(也称为“静态版本”)(用动态版本声明),并在javadoc link参数的变量部分使用它?

EN

回答 1

Stack Overflow用户

发布于 2020-08-04 11:12:04

Gradle似乎没有提供一种开箱即用的干净方法。例如(Kotlin DSL),获取对实际依赖项的引用不会生成解析的版本:

代码语言:javascript
运行
复制
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)
}

结果如下:

代码语言:javascript
运行
复制
$ ./gradlew build

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

因此,获取实际版本的唯一方法是解析配置,然后根据文件名执行一些子字符串操作:

代码语言:javascript
运行
复制
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/"
        )
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63235221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档