2017-01-08 6 views
1

これはAndroidとは関係なく、「gradle syncコマンド」のために私がgoogleに出すことができるすべてについてです。タスクのないグレード同期

複数のディレクトリを同期したい。どのように動作すること

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の出力を、それをES)を手動で呼び出すことは決してないだろうなタスクを作成嫌い。だから私は

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

Projectにはcopy()メソッドがあります。 sync()メソッドはありません。 https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:copy(groovy.lang.Closure) –

+0

@JBNizetこれは、ドキュメンテーション。 :Dしかし、 'sync {...}'はどうしますか? – maaartinus

+0

それは残念なことに、groovyの魔法の私の理解が止まるところです。私が言うことができるのは、それをblablaに置き換えることによって、blablaメソッドが見つからないことについて、gradleが文句を言うことです。しかし、私はどこにも記録された同期方法を見つけることができません。 –

答えて

0

どうすればそれがcopyと動作しますか?

copyはコメントで述べたようJB NizetProjectのメソッドであるため、それは動作します。

解決策はありますか?

はい、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() 
    } 
} 

別の解決策は(再び、overwritetrueとして設定する必要があります)Syncタスクを実行する方法と呼ばれる同期を作成することです。

また、同期アクションごとに保存プロパティを使用する場合は、リストの表示方法にいくつかの回避策が必要です。多分、as、['src1':['dest1','preserve_variables..'],'src2':...]

どのようにしてsyncブロック内で許可されているかを知ることができますか?私はスタックトレースを見て、私はsyncに戻り値があるFileOperations.javaにおける方法であることが見出さ

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

: 私は次のタスクを実行しようとしました。たぶん、理由printが実行され、Could not find method sync()のエラーは発生しません。有効なオブジェクトを返さないためにNPEが発生します。

関連する問題