2017-11-30 40 views
0

私は、カスタムのGradleタスクに問題がある:ここでは「クリーンビルド」 を実行すると、私はアンドロイドのjarライブラリをコピーして、その後にその名前を変更したいと思いますが、私はそれをどのように定義したかである:Gradleのタスクの依存関係のため

私も試してみました

... 
:mylibmodule:testReleaseUnitTest 
:mylibmodule:test 
:mylibmodule:check 
:mylibmodule:build 
:mylibmodule:clean 
:mylibmodule:CreateJar NO-SOURCE 

task('CreateJar', type: Copy, dependsOn: [':mylibmodule:clean', ':mylibmodule:build']){ 
    doLast { 
    from('build/intermediates/bundles/release/') 
    into('libs') 
    include('classes.jar') 
    rename('classes.jar', 'MyLib.jar') 
    } 
} 

問題はlibには、先のフォルダにコピーされないようGradleのログの結果では、「クリーン」、「ビルド」タスクの後に行われることですdependsOn:[] 'のタスクの順序を変更することはできますが、anythは変更されません私のミスはどこにあるのか誰にも分かりますか?事前

+0

Jarの作成がクリーニングに依存するのはなぜですか? –

+0

ビルド前にいつもきれいにするためにC言語でコーディングしていた時、古い悪い癖があるかもしれません。ビルドはaarを作成しますが、私はちょうど中間体ビルドディレクトリで作成されたjarが必要です。 CreateJarタスクは、ターゲットディレクトリのビルド中に実行したい自動コピーです。 – Snorky35

答えて

1

で おかげdependsOnリストは、任意の順序保証を課しません。通常、実際に注文保証を行う他の関係がない場合、最初にリストされたものが最初に実行されます。

cleanbuildに依存する場合(一例は、その後、buildは常にclean前に実行されますbecuaseそれは、あなたがそのdependsOn属性でそれをどう定義するかは重要ではありません。このようなケースではないことをするので、私には明らかです)最終的になぜbuildが実行されるのかを判断するには、cleanの前に完全なビルドスクリプトを見ることができません。あなたが投稿したものから、それは決定できません。

あなたが従っているのは、依存性を追加せずに順序制約を定義するclean.shouldRunAfter buildまたはclean.mustRunAfter buildでしょうか。したがって、各タスクを単独で実行することはできますが、両方を実行すると、指定した順序でタスクが定義されます。これらの2つの違いは、タスクの実行を並列化する場合にのみ関連し、並列iircで実行できる手段の後に実行する必要があります。

+0

ありがとうございます。私は '注文保証'については確信が持てませんでした。実際、「クリーン」や「ビルド」タスクはアンドロイド・グラデル・プラグインによって自動的に管理されるため、行動を変更することはできません。管理されているホックスを分析する必要があります。別の方法 – Snorky35

+1

できます。任意のタスクを変更できます。 'dependsOn'や' shouldRunAfter'などを追加したいのであれば、何の問題もなくこれを行うことができます。プラグインを適用すると、タスクが追加および設定され、後でビルドスクリプトで自由に変更することができます。 – Vampire

関連する問題