Ich habe eine grundlegende Abfrage über die Gradle-Lebenszyklus. Mein Projekt ist ein Multi-Modul-Projekt.Chaining Gradle Aufgaben und Gradle Lebenszyklus
bemerkte ich, dass die folgenden Befehl ein:
./gradlew clean bignibou-server:run
die folgenden zwei Befehle in dieser Reihenfolge zu laufen laufen nicht entspricht:
./gradlew clean
./gradlew bignibou-server:run
bignibou-server
einer meiner Module ist.
Die Ausgabe des ersten Befehls führt zu einer anderen Ausgabe als die beiden folgenden Befehle.
Kann jemand bitte erklären, warum das möglicherweise auf relevante Dokumentation verweist?
bearbeiten: Im ersten Fall wird einer der erzeugten Quellen gelöscht, während er im zweiten Fall nicht gelöscht wird. Wie kann das sein?
bearbeiten 2:
von der Wurzel build.gradle
:
import io.franzbecker.gradle.lombok.task.DelombokTask
def javaVersion = 1.8
buildscript {
repositories {
mavenCentral()
maven { url "http://repo.spring.io/release" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/snapshot" }
maven { url "https://plugins.gradle.org/m2/" }
}
ext {
javaLanguageLevel = '1.8'
}
ext['mockito.version'] = "${mockitoVersion}"
ext['hibernate.version'] = "${hibernateVersion}"
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("io.franzbecker:gradle-lombok:${gradleLombokVersion}")
}
}
configure(allprojects) { project ->
group = "com.bignibou"
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
configurations {
mapstruct
}
repositories {
mavenCentral()
maven { url "http://repo.spring.io/release" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/snapshot" }
maven { url "https://artifacts.elastic.co/maven" }
}
compileJava {
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
}
test {
reports.html.destination = file("$reports.html.destination/unit")
reports.junitXml.destination = file("$reports.junitXml.destination/unit")
}
task delombok(type: DelombokTask) {
ext.outputDir = file("$buildDir/src-delomboked/java")
outputs.dir(outputDir)
sourceSets.main.java.srcDirs.each {
inputs.dir(it)
args(it, "-d", outputDir)
}
}
// FIXME: refactor paths to generated sources
task mapStructClean {
delete file("build/generated-sources/mapstruct/main")
}
task generateMainMapperClasses(type: JavaCompile, group: 'build') {
ext.aptDumpDir = file("${buildDir}/tmp/apt/mapstruct")
destinationDir = aptDumpDir
classpath = compileJava.classpath + configurations.mapstruct
source = file("$buildDir/src-delomboked/java")
ext.sourceDestDir = file("build/generated-sources/mapstruct/main")
options.define(
compilerArgs: [
"-nowarn",
"-proc:only",
"-encoding", "UTF-8",
"-processor", "org.mapstruct.ap.MappingProcessor" + ',lombok.launch.AnnotationProcessorHider$AnnotationProcessor',
"-s", sourceDestDir.absolutePath,
"-source", rootProject.javaLanguageLevel,
"-target", rootProject.javaLanguageLevel,
]
);
inputs.dir source
outputs.dir "${buildDir}/generated-sources/mapstruct/main"
doFirst {
sourceDestDir.mkdirs()
}
doLast {
aptDumpDir.delete()
}
}
}
task wrapper(type: Wrapper) { gradleVersion = '3.5' }
von bignibou-commmon
Modul:
description = "Bignibou Common"
apply plugin: 'org.springframework.boot'
apply plugin: 'io.franzbecker.gradle-lombok'
configurations {
querydslapt
mapstruct
}
dependencyManagement {
dependencies {
dependency "org.elasticsearch:elasticsearch:${elasticsearchVersion}"
}
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa") {
exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
}
compile("org.springframework.boot:spring-boot-starter-mail")
compile('org.springframework.security:spring-security-core')
compile('org.hibernate:hibernate-validator')
compile("org.hibernate:hibernate-java8")
compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
//Spring cloud
compile("org.springframework.cloud:spring-cloud-spring-service-connector")
compile("org.springframework.cloud:spring-cloud-localconfig-connector")
compile("org.springframework.cloud:spring-cloud-cloudfoundry-connector")
// Relational Database
compile("org.postgresql:postgresql:${postgresqlVersion}")
compile("org.flywaydb:flyway-core")
// Connection pooling
compile("com.zaxxer:HikariCP")
//Shield
compile("org.elasticsearch.client:x-pack-transport:${elasticsearchVersion}")
compile("org.elasticsearch:elasticsearch:${elasticsearchVersion}")
compile("org.apache.logging.log4j:log4j-api")
compile("org.apache.logging.log4j:log4j-core")
// QueryDSL
compile("com.querydsl:querydsl-core:${queryDslVersion}")
compile("com.querydsl:querydsl-jpa:${queryDslVersion}")
querydslapt("com.querydsl:querydsl-apt:${queryDslVersion}")
// Jackson
compile("com.fasterxml.jackson.core:jackson-core")
compile("com.fasterxml.jackson.core:jackson-annotations")
compile("org.mapstruct:mapstruct-jdk8:${mapstructVersion}")
mapstruct("org.mapstruct:mapstruct-processor:${mapstructVersion}")
compile("org.apache.httpcomponents:httpclient:${httpClientVersion}")
compile("org.jasypt:jasypt:${jasyptVersion}")
}
sourceSets {
main {
ext.originalJavaSrcDirs = java.srcDirs
java.srcDir "build/generated-sources/mapstruct/main"
output.dir("build/generated-mail-templates")
}
generated {
java {
srcDirs = ["build/generated-sources/java", "build/src-delomboked/java", "build/generated-sources/mapstruct/main"]
}
}
}
bootRepackage {
enabled = false
}
task generateQueryDSL(type: JavaCompile, group: 'build') {
description "Generates the QueryDSL query types"
source = sourceSets.main.java
classpath = configurations.compile + configurations.querydslapt
options.compilerArgs = [
"-proc:only",
"-processor",
"com.querydsl.apt.jpa.JPAAnnotationProcessor" + ',lombok.launch.AnnotationProcessorHider$AnnotationProcessor'
]
destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}
// FIXME: add cssFile &
// FIXME: add dependsOn processMailTemplates &
// FIXME: clean mail templates html
// FIXME: ensure build is stopped if templates are not processed
task npmInstall(type: Exec) {
description "npm install"
commandLine 'npm', 'install'
}
task processMailTemplates {
description "Processes mail templates"
dependsOn npmInstall
def templateSrcDir = "src/main/templates/mail/"
def templateDestDir = "build/generated-mail-templates/META-INF/templates/mail/"
mkdir templateDestDir
def templateNames = []
fileTree(dir: templateSrcDir, include: '**/*.html').visit {
FileVisitDetails details -> templateNames << details.file.name
}
templateNames.each { templateName -> inlineCss(templateSrcDir + templateName, templateDestDir + templateName) }
outputs.upToDateWhen { false }
}
static def inlineCss(src, dest) {
def juice = 'node_modules/.bin/juice'
def juiceResourcesDir = 'src/main/templates/misc/'
def juiceArgs = "--options-file ${juiceResourcesDir}juiceOptions.json --css ${juiceResourcesDir}mailStyle.css"
"${juice} ${juiceArgs} ${src} ${dest}".execute(null, new File('bignibou-common'))
}
compileJava {
dependsOn generateQueryDSL
source generateQueryDSL.destinationDir
}
compileGeneratedJava {
dependsOn generateQueryDSL
options.warnings = false
classpath += sourceSets.main.runtimeClasspath
}
idea {
module {
sourceDirs += file('build/generated-sources/java')
}
}
processResources.dependsOn processMailTemplates
compileJava.dependsOn generateMainMapperClasses
generateMainMapperClasses.dependsOn mapStructClean
generateMainMapperClasses.dependsOn delombok
clean {
delete sourceSets.generated.java.srcDirs
}
von bignibou-server
Modul:
description = "Bignibou Server"
configurations {
mapstruct
integrationTest
integrationTestCompile.extendsFrom testCompile
integrationTestRuntime.extendsFrom testRuntime
}
apply plugin: 'io.franzbecker.gradle-lombok'
apply plugin: 'org.springframework.boot'
apply plugin: 'application'
dependencyManagement {
dependencies {
dependency "org.elasticsearch:elasticsearch:${elasticsearchVersion}"
}
}
dependencies {
compile project(":bignibou-common")
compile project(":bignibou-client")
//Spring boot
compile("org.springframework.boot:spring-boot-starter-actuator")
compile("org.springframework.boot:spring-boot-starter-data-jpa") {
exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
}
compile("org.springframework.boot:spring-boot-starter-data-redis") {
exclude group: 'redis.clients', module: 'jedis'
}
compile("biz.paluch.redis:lettuce:${lettuceVersion}")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-cache")
// Miscellaneous
compile("commons-collections:commons-collections")
compile("org.apache.commons:commons-lang3:${commonLangVersion}")
mapstruct("org.mapstruct:mapstruct-processor:${mapstructVersion}")
//Caching
compile("org.hibernate:hibernate-ehcache")
compile("com.github.ben-manes.caffeine:caffeine:${caffeineVersion}")
// Spring Session
compile("org.springframework.session:spring-session")
// Testing
testCompile project(":bignibou-test")
}
run {
systemProperty "spring.cloud.propertiesFile", System.getProperty("user.dir") + "/spring-cloud.properties"
}
springBoot {
mainClassName = "com.bignibou.Application"
}
sourceSets {
main {
ext.originalJavaSrcDirs = java.srcDirs
java.srcDir "build/generated-sources/mapstruct/main"
}
generated {
java {
srcDirs = ["build/src-delomboked/java", "build/generated-sources/mapstruct/main"]
}
}
integrationTest {
java.srcDirs = ['src/it/java']
resources.srcDirs = ['src/it/resources', 'src/main/resources']
compileClasspath = sourceSets.main.output + configurations.testRuntime
runtimeClasspath = output + compileClasspath
}
}
task integrationTest(type: Test) {
description "Run the integration tests."
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
reports.html.destination = file("$reports.html.destination/integration")
reports.junitXml.destination = file("$reports.junitXml.destination/integration")
}
compileJava.dependsOn generateMainMapperClasses
generateMainMapperClasses.dependsOn mapStructClean
generateMainMapperClasses.dependsOn delombok
check.dependsOn integrationTest
integrationTest.shouldRunAfter test
bearbeiten 3: Der Ordner, der von dem ersten Befehl in und nicht die zweiten gelöscht wird ist die folgende (von bignibou-common
Modul):
build/generated-mail-templates
bearbeitet 4: Ich habe bemerkt, dass nach der Kommentierung out output.dir(...
Aufruf (siehe unten), wird die build/generated-mail-templates
nicht gelöscht, aber leider sind die Vorlagen sind nicht im classpath enthalten ...
sourceSets {
main {
ext.originalJavaSrcDirs = java.srcDirs
java.srcDir "build/generated-sources/mapstruct/main"
//output.dir("build/generated-mail-templates")
}
Könnte einfacher zu erklären, wenn Sie den Code des Builds, und die Ausgabe, die Sie in den beiden Fällen erhalten. –
@JBNizet Ich habe meinen Beitrag mit einer ersten Bearbeitung bearbeitet. Ich werde Teile des Build-Skripts in eine zweite Bearbeitung einfügen. – balteo
@JBNizet Ich habe meinen Beitrag entsprechend bearbeitet. – balteo