2016-09-12 7 views
0

をブロックdoFirstでzipTreeを実行することができません、私は次のようにdoFirstブロックのいくつかのjarファイルを爆発しようとしています -のGradle:

task copyBinaries(type: Copy){ 

    def Jar1 = "" 
    def Jar2 = "" 
    def Jar3 = "" 
    doFirst { 
     Jar1 = configurations.Lib1.singleFile 
     Jar2 = configurations.Lib2.singleFile 
     Jar3 = configurations.Lib3.singleFile 
    } 

    inputs.files configurations.Lib1 
    inputs.files configurations.Lib2 
    inputs.files configurations.Lib3 

    from(zipTree(file(Jar1))) { 
      into('jar_folder1') 
    } 
    from(zipTree(file(Jar2))) { 
      into('jar_folder2') 
    } 
    from(zipTree(file(Jar3))) { 
      into('jar_folder3') 
    } 
    into('build/libs/') 
    } 
} 

構成フェーズでの依存関係の回避解像度ためには、私が抽出していますdoFirstブロック内の構成からのファイル名問題は、コピータスクで設定フェーズ中にコピー元とコピー先が必要なため、gradleはJar1、Jar2、Jar3を空の文字列として表示し、エラーをスローします。 私は、実行時に(doFirstブロックの実行後に)コピータスクが引数(ソースファイル)を受け取れるようにする方法を探しています。

このような状況にはどうすれば対処できますか?ありがとう。

+0

多分何かhttps://docs.gradle.org/current/javadoc/org/gradle/api/file/CopySpec.htmlを使用していますか? – judoole

答えて

1

私は、別の出力として作成されたパスからコピーしなければならない状況に似ています。 私はちょうど私のタスクのdoLastブロックにコピーロジックを宣言し、これを解決:

task copyStuff { 
    doLast { 
     copy { 
      from zipTree('path/to/archive') 
      into 'destination/dir' 
     } 
    } 
} 

をあなたはちょうどあなたのタスクは、例えばDEPENDSONを使用して必要な出力を作成タスクの後に実行されることを、確認する必要があります。