2017-07-14 9 views
0

私はgradleに移行し、ant build.xmlスクリプトをgradleに移行するのが初めてです。通常、コピー作業はかなりシンプルで簡単ですが、私はこの小さな複雑なコピー作業(シンプルなものもあります)に遭遇しました。このantコードをgradleタスクに変換する方法を知っていますか?私がこれまでに書き込もうとしたグラデルコピータスク:グラントのマイグレーション

<copy todir="client" verbose="true"> 
     <fileset dir="${build.classes}"> 
     <include name="com/corp/domain/**" />     
     </fileset> 
    </copy> 

Gradleのタスクは、私は、以下の、ファイルセットおよび冗長それが移行タスク

答えて

1

あなたのGr adleタスクはすでにほぼすべてのことを正しく行っています。 Antの<fileset>はファイルのグループです。 dir=を使用すると、1つのディレクトリから開始し、このディレクトリ内のすべてのファイルのサブセットを含めるか除外することができます。この動作は、CopySpecインターフェイスを実装しているため、Gradle Copyタスクによって既に実装されています。あなたが複数の<fileset>の要素を使用する必要がある場合

task copyDocs(type: Copy) { 
    from 'path/to/dir' 
    include 'com/corp/domain/**' 
    into 'client' 
} 

は、あなたがそれらのそれぞれの子CopySpecを追加することができます:あなたはあなたの例で行ったようなので、一つだけのAntのためにあなたは、Copyタスクとそのメソッドを使用することができます<fileset> 、例えばfromメソッドを使用し、続いてクロージャを使用します。このクロージャ内の構成は唯一1つだけ<fileset>を設定するように、このディレクトリからのファイルに適用されます:

task copyDocs(type: Copy) { 
    from('dir1') { 
     include 'foo/bar' 
    } 
    from('dir2') { 
     exclude 'bar/foo' 
    } 
    into 'dir3' 
} 

${build.classes}はAntのプロパティを参照します。 GradleはGroovyをベースにしているため、さまざまな場所や方法でプロパティを定義できます(例えばextra properties)。buildはほぼすべてのGradleビルドスクリプトに存在するタスクの名前なので、build.classesを直接実行するbuildタスクの範囲内のプロパティを探します。

task copyDocs(type: Copy) { 
    // if you defined the property before 
    from my.build.classes 
    include 'com/corp/domain/**' 
    into 'client' 
} 

verbose属性は、すべてのファイルのコピー操作は、コンソールにログオンする必要があるかどうかを定義します。 Gradleは簡単なオプションでファイルのロギングをサポートしていないため、独自に実装する必要があります。幸いにも、GradleはeachFileメソッドを提供しています。コピーされたファイルごとに呼び出され、FileCopyDetailsオブジェクトを保持するクロージャを渡すことができます。私はAntがコピーしたファイルをどのように記録するのか分かりませんが、次のような方法があります:

task copyDocs(type: Copy) { 
    // ... 
    eachFile { details -> 
     println "Copying $details.sourcePath to $details.path ..." 
    } 
} 
-1

@ronypatilを完璧にするために画像に来ることができる方法を知っておく必要があり

task copyDocs(type: Copy) { 
    from 'dist' 
    include "com/corp/domain/**" 
    into 'client' 
} 

ですコードを使用すると、問題を解決するための参考になる可能性があります。

task copyDocs(type: Copy) { 
    FileTree tree = fileTree("dist") 
    tree.include "com/corp/domain/**" 

    File toPath = file("client") 

    tree.each { File file -> 
     from file 
     into toPath 
     println "copy $file into $toPath" 
    } 
} 
関連する問題