我正在尝试消除IDE(Intellij)建议的所有错误和警告。
其中,log4j2依赖移除代码出现警告,如下所示。
'exclude' cannot be applied to '(['group':java.lang.String, 'module':java.lang.String])'
我寻找一种方法来消除这个错误,我成功地消除了它。
但我不知道它为什么消失了。
(the警戒以上,但实际操作中没有问题)
1.
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
configurations {
implementation {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
configurations {
all {
implementation {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
}
第一种方法是显示错误消息。
第二种和第三种方法没有任何错误消息,工作正常。
你能告诉我这三种方法的区别吗?
1条答案
按热度按时间9lowa7mx1#
至于IntelliJ警告-这似乎是a caching issue that can resolve itself。
配置
configurations
是一个ConfigurationContainer
-它包含许多配置示例,类型为Configuration
。(旁白:是的,“配置”这个名称容易混淆。它并不意味着“用于配置Gradle项目的属性或设置”,而是“可能是传出工件或传入依赖项的文件集合”)
configurations.all {}
将检索 * 所有 * 配置,并尝试使用lambda的内容来配置每一个配置。除非我们在一个任务中,否则解析 * 所有 * 配置通常(但不总是!)是一个坏习惯,因为它可能会触发本可以避免的工作,这将使构建变慢。
configurations.implementation {}
将检索名为implementation
的 single 配置。implementation
配置由Java插件创建。同样,lambda将配置该配置。在这两种情况下-lambda的内容将具有
Configuration
的接收器类型。嵌套配置
你的第三个例子很不寻常。
这样做的目的是,每当一个
Configuration
被添加到项目的ConfigurationContainer
中时,lambda就会被触发。您定义的lambda将配置implementation
配置,并添加一个exclusion。这相当于:
这很奇怪...尽量避免像这样的嵌套配置!在这个简单的例子中,它可能工作正常,但如果内部lambda依赖于另一个lambda,它将导致问题,因为
implementation
是all
的一部分-所以它可能会导致一些奇怪的递归。