没有任务的Gradle同步

时间:2017-01-08 17:22:21

标签: gradle build.gradle

这与Android以及我可以谷歌出去的所有内容无关" gradle sync命令"。

我想同步几个目录。有效的是

task mysync1 {
    dependsOn dep1, dep2, ...
    from "src1"
    into "dst1"
}
task mysync2 {
    dependsOn dep1, dep2, ...
    from "src2"
    into "dst2"
}
...
task mysync {
    depends on mysync1, mysync2, ....
}

但我讨厌创建我永远不会手动调用的任务(尤其是它会使gradle tasks的输出混乱)。所以我试过

task mysync {
    dependsOn dep1, dep2, ...
    doLast {
        sync {
            from "src1"
            into "dst1"
        }
        sync {
            from "src2"
            into "dst2"
        }
        ...
    }
}

但我收到了错误

Could not find method from() for arguments [src1] on task ':mysync'.

有解决方案吗?这是个坏主意吗?

它如何与copy一起使用?

如何找出sync块内允许的内容(我只能找到Sync任务)?

1 个答案:

答案 0 :(得分:0)

  

为什么它适用于copy

这是有效的,因为copy是评论中提到的Project JB Nizet方法。

  

有解决方案吗?

是的,有一个使用任务Sync的解决方案,因为没有名为sync的方法。

task megasync() {
  dependsOn dep1,dep2....
  ['src1':'dest1','src2':'dest2',...].each{
    src,dest->
    task sync(type:Sync,overwrite:true){
      from src
      into dest
    }
    sync.execute()
  }
}

另一个解决方案是创建一个名为sync的方法来执行Sync任务(同样,overwrite必须设置为true)。

此外,如果要对每个同步操作使用保留属性,则表示列表的方式需要一些解决方法。也许是,['src1':['dest1','preserve_variables..'],'src2':...]

  

如何找出同步块内允许的内容?    我试图执行以下任务:

task test{
    sync{
        print "Testing"  // This executes, but NPE is raised for `sync` on
                        // some other default sync methods
    }
}

我查看了堆栈跟踪,发现syncFileOperations.java中的一个方法,它有一个返回值。也许,这就是print执行的原因,并且不会引发错误Could not find method sync(),而是因为没有返回有效对象而引发NPE