我们有一个 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
块,所以看来这个块本身并没有被弃用?
当你这样做时
configurations {
fooReleaseImplementation
barReleaseImplementation
}
您创建这些配置,然后急切地访问它们。这似乎是后面错误的根源,因为 Gradle 试图阻止您将文件添加到已访问的配置中。
要在不急切访问的情况下创建这些配置,您可以使用
register
方法。
configurations {
register('fooReleaseImplementation')
register('barReleaseImplementation')
}
引用现有配置时,无法创建或注册...
请务必将用于解决方案的配置标记为
或者使用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