7

インクリメンタル ビルド システムである Gradle は、ソースまたは出力に変更が加えられていないことを検出し、必要に応じてタスクをスキップしてビルド時間を節約することになっています。

ただし、私のビルドでは、gradle タスクの後続の実行で、間に変更がないため、このインクリメンタル機能は機能していません。compileJava、jar などは、変更が加えられたときだけでなく、すべてのビルドで実行されます。

私たちのビルドは非常に複雑です (非常に古くて非常に厄介な ant ビルドから gradle に切り替えています) ので、小さなスニペットを表示します。

buildDir = 'build-server'
jar {
    sourceSets.main.java.srcDirs = ['src', 
                '../otherProject/src']

    sourceSets.main.java {

        include 'com/ourCompany/pkgone/allocation/**'
        include 'com/ourCompany/pkgone/authenticationmngr/**'
                      ...

        //Excludes from all VOBs
        exclude 'com/ourCompany/pkgtwo/polling/**'
    }

    sourceSets.main.resources.srcDirs = ['cotsConfig/ejbconfig']
    sourceSets.main.resources {
        include 'META-INF/**'
    }

}

dependencies {
    compile project(':common')
}

このプロジェクトを 2 回続けて実行gradle jarすると、次の出力が得られます。

P:\Project>gradlew jar
:common:compileJava
:common:processResources UP-TO-DATE
:common:classes
:common:jar
:clnt:compileJava
:clnt:processResources UP-TO-DATE
:clnt:classes
:clnt:jar

BUILD SUCCESSFUL

Total time: 1 mins 46.802 secs
P:\Project>gradlew jar
:common:compileJava
:common:processResources UP-TO-DATE
:common:classes
:common:jar
:clnt:compileJava
:clnt:processResources UP-TO-DATE
:clnt:classes
:clnt:jar

BUILD SUCCESSFUL

私の質問は、最新の検出が適切に機能しないようにするために何をしている可能性があるかということです。複雑なビルド パスに関連している可能性がありますか?

4

2 に答える 2

10

で実行すると--info、Gradle はタスクが最新でない理由を通知します。

于 2013-10-29T22:23:33.603 に答える
1

あなたがする必要がある2つのこと

  1. Gradle のバージョンが 2.1 以降かどうかを確認します
  2. インクリメンタル ビルドを設定する方法があります。

    tasks.withType(JavaCompile) { options.incremental = true // one flag, and things will get MUCH faster }

参照はこちら: https://blog.gradle.org/incremental-compiler-avoidance

于 2017-05-10T00:12:54.257 に答える