问题 如何使用gradle中的“复制”任务复制目录


我想将一系列文件和整个目录复制到单个Copy任务中的另一个目录中。我可以复制单个文件,以及 内容 目录,但我如何复制目录本身?

这是我的任务:

task myTask(type: Copy) {
    from 'path/to/file'
    from 'path/to/dir'
    into 'path/to/target'
}

它复制文件OK,但只复制dir中的文件。我想最终得到目录的内容 path/to/target/dir (不是在 path/to/target)。

我通过使用找到了一个解决方法:

task myTask(type: Copy) {
    from 'path/to/file'
    from 'path/to'
    into 'path/to/target'
    include 'dir'
}

但这很容易发生名称冲突。我实际上有很多文件和dirs要复制,我想把它作为一项任务。


10471
2017-12-14 16:44


起源



答案:


有一本书可以在Gradle网站上下载 这里  或点击“获取免费电子书” 这里“超越基础的Gradle” 它为第3页的问题提供了直接的答案(转换目录结构)。

应用于您的示例,解决方案如下:

    task myTask(type: Copy) {
        from 'path/to/file'
        from 'path/to/dir' {
            into 'dir'
        }
        into 'path/to/target'
    }

限制是它不会动态确定二级目标目录的名称(DIR)从源头,但它是一个干净的方法。


7
2017-12-19 12:06



哇,这与我的回答有很大的不同 - AdamSkywalker
@adam这是一个比你更好的解决方案,因为这更像是“OO” - 行为的自定义包含在命令中,而你的更像是回调或其他命令 - Bohemian♦
@Bohemian我以不同的顺序看到相同的4行:) - AdamSkywalker


答案:


有一本书可以在Gradle网站上下载 这里  或点击“获取免费电子书” 这里“超越基础的Gradle” 它为第3页的问题提供了直接的答案(转换目录结构)。

应用于您的示例,解决方案如下:

    task myTask(type: Copy) {
        from 'path/to/file'
        from 'path/to/dir' {
            into 'dir'
        }
        into 'path/to/target'
    }

限制是它不会动态确定二级目标目录的名称(DIR)从源头,但它是一个干净的方法。


7
2017-12-19 12:06



哇,这与我的回答有很大的不同 - AdamSkywalker
@adam这是一个比你更好的解决方案,因为这更像是“OO” - 行为的自定义包含在命令中,而你的更像是回调或其他命令 - Bohemian♦
@Bohemian我以不同的顺序看到相同的4行:) - AdamSkywalker


我知道的唯一解决方案:

task myTask(type: Copy) {
    into 'path/to/target'
    from 'path/to/file'

    into ('dir') {
       from 'path/to/dir'        
    }
}

请记住 into: ('dir') 建筑工程相对而言 path/to/target/ 位置


7
2017-12-14 18:00



这是一种改进,但我无法相信没有办法正确/简单地做到这一点 - Bohemian♦
向这个人投票......这是第一个正确的答案。 - Erik Aigner