2017-01-13 8 views
0

ビルドの実行フェーズでJarタスクを実行する必要があります。 IはGradle JarタスクdoLastのdestinationDirを無視する

task ("createJar", type: Jar, dependsOn: "some_task") { 
    doLast{ 
    println ("default destinationDir " + destinationDir) 
    destinationDir file("some_location") 
    println ("destinationDir after change" + destinationDir) 
    from "some_dir" 
    } 
} 

ロガーdestinationDirの値が変更されたことを示してみました。しかし、私がスクリプトを実行すると、 "some_location"の代わりにデフォルトの場所にJarが作成されます。

「doLast」を削除した場合、タスクは設定フェーズで機能し、ニーズに合わないdependsOn値は無視されます。

答えて

1

実行フェーズで構成を変更しないでください。これは最新のチェックに反して動作し、必要でないときにはタスクが実行され、必要であれば実行しないことがあります。このタスクの最新のチェックを完全に無効にしない限り、Gradleの大きな強みの1つを無効にしない限り。

doLastを実行しないでください。正しく動作します。あなたが述べたように、設定フェーズ中に実行されるタスクはではなくです。 printlnステートメントは、コンフィグレーションブロックの中にあるコンフィグレーションフェーズ中に実行されます。実際のタスクの実行は、定義した依存性の後に実行されます。

PS:もちろん、doLast { }ではなくdoFirst { }に設定する必要があります。その名前が示すように、の後にdoLast { }に既に実行されています。doFirst { }の前にがあります。しかし、しないでください、それはおそらく正しいことではありません。

関連する問題