Gradle Copy任务仅执行部分复制

时间:2016-11-11 13:05:33

标签: java gradle

我有一个Gradle“部署”任务,它将JAR和“config”文件夹的所有内容复制到预期目的地。我的项目目录结构如下:

Message msg = new Message(to, Message.Type.chat);
                Log.d("=====SEND MSG====>>", msgText);
                msg.setBody(msgText);
                connection.sendPacket(msg);

我的myapp/ src/main/java/ <java sources> config/ <lots of stuff> build.gradle settings.gradle 任务看起来像是:

deploy

当我运行task deploy(type: Copy, overwrite: true) { from('build/libs') into('/Users/myuser/myapp/deploy/myapp') include('myapp.jar') from('config') into('/Users/myuser/myapp/deploy/myapp') include('config/**') } 时,我看到JAR被复制到./gradle build deploy,但是不是 /Users/myuser/myapp/deploy/myapp目录(也不是它的所有子目录和内容) 。所需的最终结果是config目录,如下所示:

/Users/myuser/myapp/deploy/myapp

此外,我们的想法是这个副本应该是“drop n'watch”,特别是对于/Users/myuser/myapp/deploy/myapp/ myapp.jar config/ <lots of stuff> 目录。也就是说,无论{{1}当前是什么}}目录,当我运行config时,那些内容被完全替换为我项目的/Users/myuser/myapp/deploy/myapp/config目录中的任何内容。

更新

我创建了一个GitHub repo来证明这个问题。只需按照说明重现即可。

我出错的任何想法?

2 个答案:

答案 0 :(得分:1)

我想,原因是include('config/**'),其中应包含类似config/config/**的内容,其中**是所有子目录,但不是config/目录下的所有文件。< / p>

尝试按如下方式进行:

task deploy(type: Copy, overwrite: true) {
    from('build/libs')
    into('/Users/myuser/myapp/deploy/myapp')
    include('myapp.jar')

    into('/Users/myuser/myapp/deploy/myapp')
    include('config/**')
}

答案 1 :(得分:1)

  • 直接回答您的问题:

    task deploy(type: Copy, overwrite: true){
        from ("$buildDir/libs"){include('gradlecopyexample.jar')}
        from ("$rootDir"){include('config/**')}
        into("$buildDir/deploy")
    }
    
  • 但是,我仍然认为gradle应用程序插件非常适合您的用例。不要将config文件夹放在根目录中,而是将其放在src/dist下,然后运行gradle installDist(或distZip)将包含您的配置文件夹和分发包。