spring-projects/spring-boot — pull request #152 by jvalkeal (2013-12-09 13:53:23+00:00)
Title: Tweaks for boot gradle plugin to ease excluding dependencies

- Repackage changed to bootRepackage (I'm a bit nervous to have a generic task name repackage created automatically)
- Register BootRepackage order to use task foo(type: BootRepackage){}
- Allow user to use customConfiguration

# I can start by creating a new configuration which is
# excluding some dependencies
configurations {
hadoopruntime.exclude group: 'log4j'
hadoopruntime.exclude group: 'org.slf4j'
hadoopruntime.exclude group: 'org.apache.hadoop'
hadoopruntime.exclude group: 'org.apache.hive'
hadoopruntime.exclude group: 'commons-logging'
hadoopruntime.exclude group: 'org.codehaus.jettison'
hadoopruntime.exclude group: 'com.thoughtworks.xstream'
}
dependencies {
compile "org.springframework.batch:spring-batch-core:$springBatchVersion"
compile "org.springframework.batch:spring-batch-infrastructure:$springBatchVersion"
compile "org.springframework.data:spring-yarn-batch:$springDataVersion"
compile "org.springframework.data:spring-yarn-boot:$springDataVersion"
runtime "org.springframework.data:spring-data-hadoop:$springDataVersion"
runtime "org.springframework.data:spring-data-hadoop-core:$springDataVersion"
runtime "log4j:log4j:$log4jVersion"
runtime "org.slf4j:slf4j-log4j12:$slf4jVersion"
testCompile "org.springframework.data:spring-yarn-test:$springDataVersion"
testCompile "org.hamcrest:hamcrest-core:$hamcrestVersion"
testCompile "org.hamcrest:hamcrest-library:$hamcrestVersion"
hadoopruntime configurations.runtime
}

# I can set this custom configuration globally
# or omit it if handled with custom tasks
springBoot {
backupSource = true
customConfiguration = 'hadoopruntime'
}

# within my project I'd create custom jars
task appmasterJar(type: Jar) {
appendix = 'appmaster'
from sourceSets.main.output
exclude('**/*Container*')
exclude('**/*Client*')
}

task clientJar(type: Jar) {
appendix = 'client'
from sourceSets.main.output
exclude('**/*Appmaster*')
exclude('**/*Container*')
}

# I can create a custom tasks for boot repackage
# and set it to run only with spesific jar task
task clientBoot(type: BootRepackage, dependsOn: clientJar) {
withJarTask = clientJar
}

task appmasterBoot(type: BootRepackage, dependsOn: appmasterJar) {
customConfiguration = "hadoopruntime"
withJarTask = appmasterJar
}

# I could disable jar/bootRepackage tasks if not needed
# this may be needed if custom jars are repackaged
# Main bootRepackage may re-repackage custom jars if
# its task is executed later than custom jar tasks
//jar.enabled = false
//bootRepackage.enabled = false

# This trick may help to execute tasks on
# a spesific order, doesn't matter
# if main bootRepackage disabled
task bootJars
bootJars.dependsOn = [clientBoot,containerBoot,appmasterBoot]

build.dependsOn(clientBoot)
build.dependsOn(containerBoot)
build.dependsOn(appmasterBoot)
//build.dependsOn(bootJars)