2016-05-13 7 views
1

Gradle 2.12を使用しています。私のビルドファイルでは、各モジュールがマニフェストに余分な情報を入れるように設定します。私は次のようにします:マニフェストの変更だけを実行するとjarタスクが実行されないようにする

tasks.withType(Jar) { 
    manifest { 
     attributes(
       'Build-By': buildBy, 
       'Build-JDK': buildJdk, 
       'Build-Time-ISO-8601': buildTime_ISO_8601, 
       'Build-SCM-Info': buildScmInfo 
     ) 
    } 

変数はビルドの開始時に一度初期化されます。

これはうまくいきます.1つの欠点があります:jarタスクが常に呼び出され、その '入力'が変更されたことが判明し、jarで修正されたモジュールに応じてすべてのモジュールが再コンパイルされます。例えば、プロジェクトの構造を有する:

A、Bは、Cがビルドが任意のコードを変更することなく、第2の時間の間に実行される

に依存し、Aに依存して、Aは、コンパイルされていないが、新しいJARでありますこのため、BとCは依存関係が変更されたときに再コンパイルする必要があります。

どのようにこれを修正できますか?

答えて

1

コンフィグレーションフェーズから(doFirstクロージャで宣言することによって)マニフェスト仕様を移動して、デフォルトのマニフェストファイルの変更を探しているGradleを作成することができます。このようなもの:

tasks.withType(Jar) { 
    doFirst { 
    manifest { 
     attributes \ 
     'Build-By': buildBy, 
     'Build-JDK': buildJdk, 
     'Build-Time-ISO-8601': buildTime_ISO_8601, 
     'Build-SCM-Info': buildScmInfo 
    } 
    } 
} 

この場合、マニフェストの内容は、jar-taskが実行される場合にのみ変更する必要があります。

+0

シンプルなので、ありがとう。 – wujek

関連する問題