2016-06-26 1 views
2

Я создал проект «Грейдл» для весеннего приложения. Мой build.gradle выглядит следующим образом:Почему задача Gradle 'build' не обновляется, даже если в исходном коде нет изменений?

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' 
    } 
} 

Тогда каждый раз, когда я побежал gradle build без каких-либо изменений в исходном коде, несколько задач, всегда выполняются в то время как я думаю, что они должны быть уточненным:

➜ 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) ✗ 

Как видите, задачи «findMainClass», «jar», «bootRepackage», «сборка» и «сборка» считаются несовременными и всегда выполняются. И каждый раз, когда сгенерированный файл jar отличается, поскольку у них есть другой дайджест MD5.

Итак, почему Gradle ведут себя так? Как я могу сделать их самыми современными и ускорить процесс сборки?

ответ

1

По умолчанию задача Spring Boot bootRepackage перезаписывает эту банку, созданную заданием jar. Это означает, что задача jar всегда считается устаревшей. Вы можете избежать этого, сконфигурировав bootRepackage с классификатором, чтобы переупакованная жировая банка была записана в отдельное место. Например:

bootRepackage { 
    classifier = 'exec' 
} 

Вы также можете быть заинтересованы в this issue, который описывает ряд усовершенствований, которые мы хотели бы сделать, чтобы Gradle плагин ботинка.

+0

Спасибо. Меня действительно беспокоит то, что я использую 'com.bmuschko: gradle-docker-plugin' для интеграции с докером, у которого есть задача построить изображение докеров, включая исполняемую банку. Каждый раз, когда я выполняю 'gradle buildDockerImage' без изменения исходного кода, он всегда будет создавать образ docker, который является трудоемкой задачей. –