Gradle `“fileTree”的“compile”实现会干扰复制库任务

Gradle `“fileTree”的“compile”实现会干扰复制库任务,gradle,Gradle,我正在把一个项目迁移到格拉德尔 我有一些本地DEP是通过编译文件树导入的(dir:“libs/$it”,包括:“*.jar”) 但是,compile不推荐使用 但如果我将其更改为implementation 然后,我的任务将不复制任何内容(使用运行时清除的文件除外): 将配置。运行时更改为。编译或实现没有帮助 发生了什么事?显示配置运行时已被弃用。它被runtimeOnly配置所取代,正如名字所说,它只提供运行时依赖项。但是,还有另一个名为runtimeClasspath的配置,它扩展了配置ru

我正在把一个项目迁移到格拉德尔

我有一些本地DEP是通过编译文件树导入的(dir:“libs/$it”,包括:“*.jar”)

但是,
compile
不推荐使用

但如果我将其更改为
implementation

然后,我的任务将不复制任何内容(使用
运行时
清除的文件除外):

配置。运行时
更改为
。编译
实现
没有帮助

发生了什么事?

显示配置
运行时已被弃用。它被
runtimeOnly
配置所取代,正如名字所说,它只提供运行时依赖项。但是,还有另一个名为
runtimeClasspath
的配置,它扩展了配置
runtimeOnly
runtime
实现

因此,只需替换示例中的配置:

task copyToLib(type: Copy) {
    from configurations.runtimeClasspath
    into "$buildDir/output/lib"
}
显示配置
运行时
已被弃用。它被
runtimeOnly
配置所取代,正如名字所说,它只提供运行时依赖项。但是,还有另一个名为
runtimeClasspath
的配置,它扩展了配置
runtimeOnly
runtime
实现

因此,只需替换示例中的配置:

task copyToLib(type: Copy) {
    from configurations.runtimeClasspath
    into "$buildDir/output/lib"
}

有些相关的问题:有些相关的问题:小心
runtimeClasspath
。默认情况下,它是可传递的,并且最终可以得到比预期多得多的库。如果您有他的问题,请使用
configurations.runtimeClasspath{transitive=false}
。您是对的,但是在任务内部使用
configurations.runtimeClasspath{transitive=false}
也是危险的,因为它将完全禁用配置的可传递性(不仅仅是任务)。可能还有其他任务或插件依赖于默认行为。如果需要,应在构建脚本开始时直接在
configurations
闭包中禁用可传递性,以使每个人都清楚。请小心
runtimeClasspath
。默认情况下,它是可传递的,并且最终可以得到比预期多得多的库。如果您有他的问题,请使用
configurations.runtimeClasspath{transitive=false}
。您是对的,但是在任务内部使用
configurations.runtimeClasspath{transitive=false}
也是危险的,因为它将完全禁用配置的可传递性(不仅仅是任务)。可能还有其他任务或插件依赖于默认行为。如果需要,应在构建脚本开始时直接在
configurations
闭包中禁用可传递性,以使每个人都清楚。