2016-05-13 4 views
0

私はフォルダcopyAggregatedLibsを持っています。このフォルダには、2つのlibs> a-libs.zip、b-libs.zipがあります。これらのライブラリには、構造体>> a-libs.zip-jarとb-libs.zip-jar があります。これらのファイルをunzippedLirariesの別のフォルダに解凍して、構造が完全であるようにしたいとします。 unzippedLibraries - a - libs - jarとb - libs - jarのようになります。 今は、libNamesという名前の配列の中にライブラリの名前を動的に取得しています。 libNamesは= {a-lib.zip、b-lib.zip} さて、私はunzippedLibrariesにcopyAggregatedLibsからダイナミックに名前が付けられたサブフォルダを持つフォルダに解凍されたファイルをコピーします。

task unzipLibrary(type:Copy){ 
libNames.each { fullComponentName -> 
    println('fullname'+fullComponentName) 
    def zipFile = [] 
    zipFile = file('build/tmp/libs/copyAggregatedLibraries/'+fullComponentName) 
    from zipTree(zipFile) 
    println('Zips'+zipFile) 
    into 'build/tmp/unpacked/unzippedLibraries/'+fullComponentName 
    } 

    } 

をファイルを解凍するためのタスクを作成するさて、ジッパーは、両方のファイルの名前を出力しますが、私はいけませんフォルダ構造を取得します。私が得るのは、2番目のライブラリの名前、つまりb-libとその中のjarフォルダだけです。それは〜とは違う毎回実行されていないようです。誰も私にこの働きをさせる方法を提案することができます。

私もdestinationDirを試しました。それは動作しません また、2つのタスクを使用して試してみました。ソースファイルがありません

答えて

0

なぜ動作しないのですか:Copy taskfromメソッドは、コピーする別のソースファイル/ディレクトリを追加するたびに複数回呼び出すことができます。しかし、intoメソッドは、宛先dirのセッターのように動作します。

あなたはこのようなあなたの目標を達成することができるはずです。

task unzipLibrary(type:Copy){ 
    libNames.each { fullComponentName -> 
     println('fullname'+fullComponentName) 
     def zipFile = file('build/tmp/libs/copyAggregatedLibraries/'+fullComponentName) 
     println('Zips'+zipFile) 
     into project.buildDir 
     // the following into calls will be relative to the one above 
     from(zipTree(zipFile)) { 
      into 'tmp/unpacked/unzippedLibraries/'+fullComponentName // notice the missing leading 'build/' 
     } 
    } 
} 

ここfromcallsが子供CopySpecを設定するには、付属の閉鎖を使用しています。そのため、クロージャ内で指定されたディレクトリは、タスクのターゲットディレクトリからの相対パスとなります。

+0

ありがとうございます。ほんのわずかな変更が必要でした。それらの中括弧はトリックでした。 :) – sver

関連する問題