Gradle 9.0 弃用警告

问题描述 投票:0回答:2

我们有一个 Android 项目(应用程序),它使用以下节来声明其依赖项,这些依赖项根据构建风格而有所不同:

configurations {
    fooReleaseImplementation
    barReleaseImplementation
}

其中

foo
bar
是风味(来自同一维度),
release
是构建类型。

然后我们引入实际的依赖项:

dependencies {
    fooReleaseImplementation "com.abc:def:$version"
    barReleaseImplementation "com.abc:def:$version:specialflavor@aar"
}

这个想法是,

foo
风格、
release
构建类型和
bar
风格、
release
构建类型具有不同的依赖关系。

如果没有

configuration
块,Gradle 会抱怨“找不到方法
fooReleaseImplementation
”和“找不到方法
barReleaseImplementation
”。

Gradle 8.8 给出了有关

configurations
块的警告:

Configuration.fileCollection(Spec) 方法已被弃用。这计划在 Gradle 9.0 中删除。将 Configuration.getIncoming().artifactView(Action) 与 componentFilter 结合使用。有关更多信息,请参阅升级指南:https://docs.gradle.org/8.8/userguide/upgrading_version_8.html#deprecate_filtered_configuration_file_and_filecollection_methods

我想为 Gradle 9.0 准备我们的项目,但无法理解警告的原因。我们没有使用

Configuration.fileCollection

这是 Gradle 8.8 中的一个错误以及它如何检测弃用,还是我遗漏了什么?

我已阅读链接文档,“新方式”示例也有一个

configurations
块,所以看来这个块本身并没有被弃用?

android gradle
2个回答
0
投票

当你这样做时

configurations {
    fooReleaseImplementation
    barReleaseImplementation
}

您创建这些配置,然后急切地访问它们。这似乎是后面错误的根源,因为 Gradle 试图阻止您将文件添加到已访问的配置中。

要在不急切访问的情况下创建这些配置,您可以使用

register
方法。

configurations {
    register('fooReleaseImplementation')
    register('barReleaseImplementation')
}

0
投票

引用现有配置时,无法创建或注册...

请务必将用于解决方案的配置标记为

canBeConsumed=false
或者使用
resolvable(String)
配置工厂方法来创建它们。

val googleImplementation by configurations
googleImplementation.also { it.isCanBeConsumed=false }

val googleApi by configurations
googleApi.also { it.isCanBeConsumed=false }

其他错误消息似乎已在 Kotlin 中修复

2.0.20
:

这计划在 Gradle 9.0 中删除。

Configuration.fileCollection(Spec)
方法已被弃用。

解决方案:

  • Configuration.getIncoming().artifactView(Action)
    componentFilter
    一起使用。

https://youtrack.jetbrains.com/issue/KT-67888/Remove-usages-of-deprecated-Configuration.fileCollection-method

© www.soinside.com 2019 - 2024. All rights reserved.