Gradle 格拉德尔';包括';或';排除';字符串列表
我的jardir结构如下所示Gradle 格拉德尔';包括';或';排除';字符串列表,gradle,groovy,build,Gradle,Groovy,Build,我的jardir结构如下所示 myDir - /util/Util.jar - /abcd/abcd.jar - /parsing_jars/pars.jar 预期的另一个目录结构应如下所示 anotherDir - Util.jar - abcd.jar - pars.jar 我正在使用下面的语法作为我的复制任务 task('copyUtil', type: Copy) { fileTree("$projectDir/myDir").each { file -&
myDir
- /util/Util.jar
- /abcd/abcd.jar
- /parsing_jars/pars.jar
预期的另一个目录结构应如下所示
anotherDir
- Util.jar
- abcd.jar
- pars.jar
我正在使用下面的语法作为我的复制任务
task('copyUtil', type: Copy) {
fileTree("$projectDir/myDir").each { file ->
if (file.isFile())
from file
}
include 'Util.jar', 'abcd.jar', 'pars.jar'
into "anotherDir"
}
它工作得很好,但若我在属性文件中将变量定义为
MY_VAR = '"Util.jar", "abcd.jar", "pars.jar"'
它将其视为一个完整的字符串,不包含任何文件。。如何将此MY_VAR
提供给copy
任务,如下所示
task('copyUtil', type: Copy) {
fileTree("$projectDir/myDir").each { file ->
if (file.isFile())
from file
}
include "${MY_VAR}"
into "anotherDir"
}
请注意:我试图将该字符串转换为列表
或数组
但两者都不起作用。。。基本上它需要逗号分隔的参数include
Javadoc说PublicAbstractCopyTask包含(字符串…包含)
下面的内容在这里不起作用:
def String[] tasksToUseAsDefault = "${SOME_VAR}".split(',')
或
工作示例
使用gradle.properties
如下所示:
MY_VAR = Util.jar, abcd.jar, pars.jar
考虑这项任务:
task('copyUtil', type: Copy) {
// ["**/Util.jar", "**/abcd.jar", ...]
def matchStr = MY_VAR.split(",").collect{"**/" + it.trim()}
from fileTree(".").include(matchStr).files
into "anotherDir"
}
这回答了你的问题吗?不,我试图将该字符串转换为
List
或Array
这两种格式都不起作用。。。基本上它需要逗号分隔的参数include
Javadoc说public AbstractCopyTask include(String…includes)
Hi@michael easter是的,如果您的解决方案按原样运行,它会非常有效,但我在问题中遗漏了一些重要的内容。因此,提供的解决方案不适用于filetree
结构。我已经用filetree
结构更新了我的问题。你能帮我查一下吗?抱歉没有首先澄清问题。filetree
用于flattern
目录结构请使用myDir
结构和所需的anotherDir
结构(即子文件夹等)更新问题。这可能有助于我们理解为什么需要扁平化。我相信这个问题还没有完全描述。我已经更新了GitHub和答案。如果回答了您的问题,请接受并投票。
task('copyUtil', type: Copy) {
// ["**/Util.jar", "**/abcd.jar", ...]
def matchStr = MY_VAR.split(",").collect{"**/" + it.trim()}
from fileTree(".").include(matchStr).files
into "anotherDir"
}