2016-06-26 2 views
2

Ich habe ein Gradle-Projekt für eine Federanwendung erstellt. Mein build.gradle ist wie folgt:Warum Gradle 'Build' Task ist nicht auf dem neuesten Stand, auch wenn es keine Änderung im Quellcode gibt?

buildscript { 
    ext { 
     springBootVersion = '1.3.5.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
     jcenter() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath('org.asciidoctor:asciidoctor-gradle-plugin:1.5.3') 
    } 
} 

apply plugin: 'java' 
apply plugin: 'spring-boot' 

jar { 
    baseName = 'edge' 
    version = '0.0.1-SNAPSHOT' 
} 
sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

bootRepackage { 
    excludeDevtools = true 
} 

dependencies { 
    compile('org.springframework.boot:spring-boot-starter-actuator') 
    compile('org.springframework.boot:spring-boot-actuator-docs') 
    compile('org.springframework.boot:spring-boot-starter-aop') 
    compile('org.springframework.cloud:spring-cloud-starter-config') 
    compile('org.springframework.cloud:spring-cloud-starter-eureka') 
    compile('org.springframework.cloud:spring-cloud-starter-hystrix') 
    compile('org.springframework.cloud:spring-cloud-starter-hystrix-dashboard') 
    compile('org.springframework.cloud:spring-cloud-starter-ribbon') 
    compile('org.springframework.cloud:spring-cloud-starter-zuul') 
    compile('org.springframework.boot:spring-boot-starter-hateoas') 
    compile('org.springframework.boot:spring-boot-starter-data-jpa') 
    compile('org.springframework.boot:spring-boot-starter-redis') 
    compile('org.projectlombok:lombok:1.16.6') 
    compile('org.springframework.boot:spring-boot-starter-security') 
    compile('org.springframework.session:spring-session') 
    compile('org.springframework.boot:spring-boot-starter-web') { 
     exclude module: 'spring-boot-starter-tomcat' 
    } 
    compile('org.springframework.boot:spring-boot-starter-undertow') 
    compile('org.springframework.boot:spring-boot-starter-websocket') 
    compile('com.h2database:h2') 
    compile('org.springframework.boot:spring-boot-devtools') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
    testCompile('org.springframework.restdocs:spring-restdocs-mockmvc') 
} 

dependencyManagement { 
    imports { 
     mavenBom "org.springframework.cloud:spring-cloud-dependencies:Brixton.RELEASE" 
    } 
} 

eclipse { 
    classpath { 
     containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') 
     containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8' 
    } 
} 

Dann jedes Mal wenn ich gradle build ohne Änderungen im Quellcode lief, wurden mehrere Aufgaben immer dann ausgeführt, während ich denke, sie sollten up-to-date:

➜ octopus git:(master) ✗ 
➜ octopus git:(master) ✗ gradle :edge:build 
:edge:compileJava UP-TO-DATE 
:edge:processResources UP-TO-DATE 
:edge:classes UP-TO-DATE 
:edge:findMainClass 
:edge:jar 
:edge:bootRepackage 
:edge:assemble 
:edge:compileTestJava UP-TO-DATE 
:edge:processTestResources UP-TO-DATE 
:edge:testClasses UP-TO-DATE 
:edge:test UP-TO-DATE 
:edge:check UP-TO-DATE 
:edge:build 

BUILD SUCCESSFUL 

Total time: 6.773 secs 

This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.13/userguide/gradle_daemon.html 
➜ octopus git:(master) ✗ md5 edge/build/libs/edge-0.0.1-SNAPSHOT.jar 
MD5 (edge/build/libs/edge-0.0.1-SNAPSHOT.jar) = d0ff71c362d089559bbc627e78e2247a 
➜ octopus git:(master) ✗ gradle :edge:build 
:edge:compileJava UP-TO-DATE 
:edge:processResources UP-TO-DATE 
:edge:classes UP-TO-DATE 
:edge:findMainClass 
:edge:jar 
:edge:bootRepackage 
:edge:assemble 
:edge:compileTestJava UP-TO-DATE 
:edge:processTestResources UP-TO-DATE 
:edge:testClasses UP-TO-DATE 
:edge:test UP-TO-DATE 
:edge:check UP-TO-DATE 
:edge:build 

BUILD SUCCESSFUL 

Total time: 6.579 secs 

This build could be faster, please consider using the Gradle Daemon: https://docs.gradle.org/2.13/userguide/gradle_daemon.html 
➜ octopus git:(master) ✗ md5 edge/build/libs/edge-0.0.1-SNAPSHOT.jar 
MD5 (edge/build/libs/edge-0.0.1-SNAPSHOT.jar) = d1c3fc5c9d0c00e0130c8c65f23b6466 
➜ octopus git:(master) ✗ 

Wie Sie sehen können, werden die Aufgaben 'findMainClass', 'jar', 'bootRepackage', 'assemble' und 'build' als nicht aktuell angesehen und immer ausgeführt. Und jedes Mal ist die generierte JAR-Datei anders, da sie einen anderen MD5-Digest haben.

Also, warum Gradle so verhalten? Wie kann ich sie alle auf den neuesten Stand bringen und den Build-Prozess beschleunigen?

Antwort

1

Standardmäßig überschreibt Spring Boot bootRepackage Aufgabe, die von der jar Aufgabe erstellt wird. Dies bedeutet, dass die Aufgabe jar immer als veraltet betrachtet wird. Sie können dies vermeiden, indem Sie mit einem Klassifizierer konfigurieren, sodass das neu verpackte Fettglas an einen anderen Ort geschrieben wird. Zum Beispiel:

bootRepackage { 
    classifier = 'exec' 
} 

können Sie auch in this issue interessiert sein, die eine Reihe von Verbesserungen beschreiben wir möchten Stiefel sind Gradle Plugin machen.

+0

Danke. Was mich wirklich stört, ist, dass ich 'com.bmuschko: gradle-docker-plugin' verwende, um in docker zu integrieren, das eine Aufgabe hat, docker image einschließlich des ausführbaren jars zu erstellen. Jedes Mal, wenn ich 'grdle buildDockerImage' ohne Änderungen im Quellcode ausführe, wird immer das Docker-Image erstellt, was eine zeitaufwendige Aufgabe ist. –

Verwandte Themen