Java 渐变复制任务仅执行部分复制

Java 渐变复制任务仅执行部分复制,java,gradle,Java,Gradle,我有一个Gradle“deploy”任务,它将一个JAR和一个“config”文件夹的所有内容复制到一个预定的目标。我的项目目录结构如下所示: myapp/ src/main/java/ <java sources> config/ <lots of stuff> build.gradle settings.gradle task deploy(type: Copy, overwrite: true) {

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

myapp/
    src/main/java/
        <java sources>
    config/
        <lots of stuff>
    build.gradle
    settings.gradle
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/**')
}
/Users/myuser/myapp/deploy/myapp/
    myapp.jar
    config/
        <lots of stuff>
当我运行
/gradle build deploy
时,我看到JAR被复制到
/Users/myuser/myapp/deploy/myapp
,但不是
配置
目录(也不是它的所有子目录和内容)。所需的最终结果是一个
/Users/myuser/myapp/deploy/myapp
目录,如下所示:

myapp/
    src/main/java/
        <java sources>
    config/
        <lots of stuff>
    build.gradle
    settings.gradle
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/**')
}
/Users/myuser/myapp/deploy/myapp/
    myapp.jar
    config/
        <lots of stuff>
/Users/myuser/myapp/deploy/myapp/
myapp.jar
配置/
此外,我们的想法是,当我运行
deploy
时,无论
/Users/myuser/myapp/deploy/myapp/config
目录中当前有什么,此副本都应该是“drop n”swap,特别是对于
config
目录,这些内容将被我的项目的
config/
目录中的任何内容完全替换

更新 我创建了一个示例来演示这个问题。只需按照说明进行复制


你知道我哪里出错了吗?

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

尽量做到如下:

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/**')
}
  • 要直接回答您的问题:

    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
    )将配置文件夹与分发包一起


谢谢@RaGe,但我正在使用应用程序插件。关于我的Gradle帖子片段,没有任何其他建议!一旦我有了一个可执行的JAR,我需要通过将它和我的配置目录复制到一个特定的位置来模拟“部署”。你看过应用程序插件的
installdist
任务了吗?谢谢@Stanislav,但这不起作用。当我执行
ls-al/Users/myuser/myapp/deploy/myapp
时,我看到JAR被复制到了那里(带有更新的时间戳),但没有复制到
config
目录。@smeeb是的,根据您的布局更新了答案。您必须从中删除第二个
,并从根目录中复制它,然后它将复制文件夹和其中的所有内容。刚刚在Stanislav(+1)用Gradle 2.14.1再次进行了测试-但是这对我不起作用。请看我的报告,它完美地再现了这个问题。只复制JAR,而不复制
config/
目录。有什么想法吗?我更新了你的示例代码的答案。