java Gradle配置“全部”的确切用途是什么?

vlf7wbxs  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(142)

我正在尝试消除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'
        }
    }
}

第一种方法是显示错误消息。
第二种和第三种方法没有任何错误消息,工作正常。
你能告诉我这三种方法的区别吗?

9lowa7mx

9lowa7mx1#

至于IntelliJ警告-这似乎是a caching issue that can resolve itself

配置

configurations是一个ConfigurationContainer-它包含许多配置示例,类型为Configuration
(旁白:是的,“配置”这个名称容易混淆。它并不意味着“用于配置Gradle项目的属性或设置”,而是“可能是传出工件或传入依赖项的文件集合”)

  • configurations.all {}将检索 * 所有 * 配置,并尝试使用lambda的内容来配置每一个配置。

除非我们在一个任务中,否则解析 * 所有 * 配置通常(但不总是!)是一个坏习惯,因为它可能会触发本可以避免的工作,这将使构建变慢。

  • configurations.implementation {}将检索名为implementationsingle 配置。implementation配置由Java插件创建。同样,lambda将配置该配置。

在这两种情况下-lambda的内容将具有Configuration的接收器类型。

configurations {
    all {
        // configure *all* configurations
        // this is a Configuration
        Configuration currentReceiver = this
    }
    implementation {
        // configure the 'implementation' configurations
        // this is also a Configuration
        Configuration currentReceiver = this
    }
}

嵌套配置

你的第三个例子很不寻常。

configurations {
    all {
        implementation {
            exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
        }
    }
}

这样做的目的是,每当一个Configuration被添加到项目的ConfigurationContainer中时,lambda就会被触发。您定义的lambda将配置implementation配置,并添加一个exclusion。
这相当于:

configurations {
    ConfigurationContainer confContainer = this
    all {
        confContainer.implementation {
            exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
        }
    }
}

这很奇怪...尽量避免像这样的嵌套配置!在这个简单的例子中,它可能工作正常,但如果内部lambda依赖于另一个lambda,它将导致问题,因为implementationall的一部分-所以它可能会导致一些奇怪的递归。

相关问题