【问题标题】:Gradle 'include' or 'exclude' List of stringsGradle 'include' 或 'exclude' 字符串列表
【发布时间】:2020-11-25 11:09:51
【问题描述】:

我的 jar 目录结构如下。

myDir
- /util/Util.jar
- /abcd/abcd.jar
- /parsing_jars/pars.jar

预期的anotherDir 结构应如下所示

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"
}

请注意:我试图将该字符串转换为ListArray 两者都不起作用...基本上它需要逗号分隔的args..include Javadoc 说@ 987654333@

如下所示在这里不起作用:

def String[] tasksToUseAsDefault = "${SOME_VAR}".split(',')

或者

def list = Arrays.asList("${SOME_VAR}".split("\\s*,\\s*"));

【问题讨论】:

  • 这能回答你的问题吗? How can I declare list in gradle.properties file?
  • 不,我试图将该字符串转换为ListArray 两者都不起作用...基本上它需要逗号分隔的args ..include Javadoc 说public AbstractCopyTask include(String... includes)

标签: gradle groovy build


【解决方案1】:

工作示例here

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"
}

【讨论】:

  • 嗨@michael-easter 是的,如果它按原样运行,您的解决方案可以完美运行,但我错过了我的问题中的一些重要内容。因此,提供的解决方案不适用于 filetree 结构。我已经用filetree 结构更新了我的问题。你能检查一下并帮助我吗?很抱歉一开始没有澄清问题。
  • filetree用于flattern的目录结构
  • 请使用myDir 的结构和anotherDir 的所需结构(即子文件夹等)更新问题。这可能有助于我们理解为什么需要扁平化。我相信这个问题没有完全描述。
  • 我已经更新了 GitHub 和答案。如果它回答了您的问题,请接受并投票赞成任何答案。
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 2013-09-04
  • 2012-11-20
  • 1970-01-01
  • 2018-11-07
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多