gpt4 book ai didi

java - Gradle 排除 VS 包含

转载 作者:行者123 更新时间:2023-12-02 12:21:55 25 4
gpt4 key购买 nike

感谢 this question 上的回答,以下工作有效:

task copyToLib(type: Copy) {
into "$buildDir/myapp/lib"
from configurations.runtime {
exclude module: 'commons-io'
}
}

我认为以下内容也应该有效(包含而不是排除):

task copyToLib(type: Copy) {
into "$buildDir/myapp/lib"
from configurations.runtime {
include module: 'commons-io'
}
}

但我收到以下错误:

org.gradle.internal.metaobject.AbstractDynamicObject$CustomMessageMissingMethodException: Could not find method include() for arguments [{module=commons-io}] on configuration ':runtime' of type org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.

这是预期的还是我错过了任何明显的东西?

最佳答案

Groovy 允许您省略大量大括号和其他不必要的语法,但这也可能会导致不良行为,就像您的情况一样。

通过from(Object, Closure)创建子CopySpec的常见方法方法看起来就像您的代码:

[...]
from 'sourcePath' {
// configuration closure
}
[...]

首先传递一个对象,该对象将通过 Project.files() 进行评估,然后传递一个用于配置的闭包。大括号可以省略。简单易行。

但是,在您的示例中,作为对象传递的表达式是一个方法调用,用于在 ConfigurationContainer 中配置 Configuration ,就像以下常见的 Gradle 代码一样:

configurations.runtime {
exclude module: 'xyz'
}

因此,传递的闭包被解释为配置Configuration(全局,顺便说一句。),而不是配置CopySpec。处理这个问题的一种方法是显式设置省略的大括号:

[...]
from(configurations.runtime, {
// configuration closure
})
[...]

请注意:使用上面的示例,您将能够使用 exclude()include() 方法,但不能像在你的代码示例!在 CopySpec 中,您只能排除(或包含)文件或文件模式,而不能排除模块。这些方法根本不允许您传递 map ,您需要传递 list of stringsanother closure .

关于java - Gradle 排除 VS 包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45705239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com