Once I provided some gradle scripts for building a runnable jar here, and now I tried to change them to gradle script kotlin and the following are the different versions of themCustom build(Building a runnable jar by the way "Copy required libraries into a sub-folder next to the generated Jar" in eclipse)//Builing a runnable jar by the way "Copy required libraries into a sub-folder next to the generated Jar"
import org.gradle.jvm.tasks.Jar
plugins {
java
eclipse
}
//profile configuration
configure<JavaPluginConvention> {
setSourceCompatibility(1.7)
setTargetCompatibility(1.7)
if(project.hasProperty("env")){
var env = project.property("env");
sourceSets.getByName("main").resources.srcDirs("src/main/profile/" + env)
}
}
dependencies {
compile("junit:junit:4.12")
}
repositories {
jcenter()
}
//copy dependencies jars to a folder
val copyDependencies = task<Copy>("copyDependencies") {
from(configurations.compile)
into("libs/lib")
}
//the jar tasks for building a runnable jar,
//and the denpendcies jars are in a folder next to the generated jar
val jar: Jar by tasks
jar.apply {
dependsOn(copyDependencies)
manifest.attributes.apply {
put("Main-Class", "samples.HelloWorld")
if (!configurations.runtime.isEmpty()) {
put("Class-Path
","./ lib/" + configurations.runtime.map{ it.name }.joinToString(" lib/"))
}
}
} The following are differents ways of building runnable jar with spring boot gradle plugin and kotlin-dsl, and most of them I make the change according to the internet resources on stackoverflow and github.
version1import org.springframework.boot.gradle.plugin.SpringBootPlugin
import org.springframework.boot.gradle.SpringBootPluginExtension
buildscript {
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
}
repositories {
jcenter()
}
}
plugins {
java
eclipse
id("org.springframework.boot") version "1.5.6.RELEASE"
}
//java {
//sourceCompatibility = JavaVersion.VERSION_1_7
//targetCompatibility = JavaVersion.VERSION_1_7
//}
dependencies {
testCompile("junit:junit:4.12")
}
repositories {
jcenter()
}
configure<JavaPluginConvention> {
setSourceCompatibility(1.7)
setTargetCompatibility(1.7)
if(project.hasProperty("env")){
var env = project.property("env");
sourceSets.getByName("main").resources.srcDirs("src/main/profile/" + env)
}
}
configure<ProcessResources>("processResources") {
//exclude shell scripts in profile folder
if(project.hasProperty("env")){
exclude("src/main/profile/scripts")
}
}
//apply<SpringBootPlugin>()
configure<SpringBootPluginExtension> {
mainClass = "samples.HelloWorld"
}
inline fun <reified C> Project.configure(name: String, configuration: C.() -> Unit) {
(this.tasks.getByName(name) as C).configuration()
}
version2import org.springframework.boot.gradle.SpringBootPluginExtension
buildscript {
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
}
repositories {
jcenter()
}
}
plugins {
java
eclipse
id("org.springframework.boot") version "1.5.6.RELEASE"
}
//java {
//sourceCompatibility = JavaVersion.VERSION_1_7
//targetCompatibility = JavaVersion.VERSION_1_7
//}
dependencies {
testCompile("junit:junit:4.12")
}
repositories {
jcenter()
}
configure<JavaPluginConvention> {
setSourceCompatibility(1.7)
setTargetCompatibility(1.7)
if(project.hasProperty("env")){
var env = project.property("env");
sourceSets.getByName("main").resources.srcDirs("src/main/profile/" + env)
}
}
configure<ProcessResources>("processResources") {
if(project.hasProperty("env")){
exclude("src/main/profile/scripts")
}
}
springBoot {
mainClass = "Application"
}
inline fun <reified C> Project.configure(name: String, configuration: C.() -> Unit) {
println(name + this.tasks.getByName(name));
(this.tasks.getByName(name) as C).configuration()
}
/**
* Retrieves or configures the [springBoot][org.springframework.boot.gradle.SpringBootPluginExtension] project extension.
*/
fun Project.springBoot(configure: org.springframework.boot.gradle.SpringBootPluginExtension.() -> Unit = {}) =
extensions.getByName<org.springframework.boot.gradle.SpringBootPluginExtension>("springBoot").apply { configure() }
Version3//build a runnable jar with kotlin-dsl and spring boot gradle plugin, and It supports profiles,
//any resource files related to different env can be placed in profile folder(env/stage/prod)
//and then run the command gradle.bat build -Penv=dev/stage/prod
import org.springframework.boot.gradle.repackage.RepackageTask
import org.gradle.language.jvm.tasks.ProcessResources
buildscript {
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
}
repositories {
jcenter()
}
}
plugins {
java
eclipse
id("org.springframework.boot") version "1.5.6.RELEASE"
}
//java {
//sourceCompatibility = JavaVersion.VERSION_1_7
//targetCompatibility = JavaVersion.VERSION_1_7
//}
dependencies {
testCompile("junit:junit:4.12")
}
repositories {
jcenter()
}
configure<JavaPluginConvention> {
setSourceCompatibility(1.7)
setTargetCompatibility(1.7)
if(project.hasProperty("env")){
var env = project.property("env");
sourceSets.getByName("main").resources.srcDirs("src/main/profile/" + env)
}
}
(tasks.getByName("processResources") as ProcessResources).apply {
//exclude the shell scripts if user used command with env like "gradle.dat build -Penv=dev"
if(project.hasProperty("env")){
exclude("src/main/profile/scripts")
}
}
(tasks.getByName("bootRepackage") as RepackageTask).apply {
mainClass = "demo.Application"
}
Referencehttps://github.com/gradle/kotlin-dsl/commit/b02916c7160ea45ad1bf7600d5a80c3bdaf6ceb9https://techdev.io/en/developer-blog/building-a-fat-jar-with-gradle-script-kotlinhttps://stackoverflow.com/questions/45399232/gradle-kotlin-is-it-possible-to-create-dynamic-on-fly-taskshttps://stackoverflow.com/questions/39630897/how-to-configure-spring-boot-repackage-with-gradle-script-kotlin
https://stackoverflow.com/questions/44741982/accessing-properties-of-a-task-in-gradle-kotlin
https://stackoverflow.com/questions/40096007/how-to-configure-the-processresources-task-in-a-gradle-kotlin-build?rq=1
https://github.com/kucharzyk/spring-kotlin-angular4/blob/master/build.gradle.kts
https://github.com/gradle/kotlin-dsl/blob/master/build.gradle.kts
https://stackoverflow.com/questions/41794914/how-to-create-the-fat-jar-with-gradle-kotlin-script?rq=1
https://github.com/sdeleuze/spring-boot-kotlin-demo/blob/master/build.gradle.kts
https://github.com/mixitconf/mixit/blob/master/build.gradle.kts
https://github.com/gradle/kotlin-dsl/blob/master/build.gradle.kts
https://github.com/mpecan/base_gradle_kts_newest/blob/master/build.gradle.kts
https://github.com/gradle/gradle/blob/907a4e78989a1d7115020535ea0c0fc313d65b20/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPluginConvention.java
https://github.com/JLLeitschuh/springBootTesting/blob/da2d3be9bff22b50d6ba0b15bc0371eb6cc88b56/build.gradle.kts
https://github.com/max-neverov/KMS/blob/a0239b9f8b82f72513b698a366209e8deb854893/build.gradle.kts
https://github.com/kolyjjj/weed/blob/ce663f1a8606171e93e9f85092322191219abb97/build.gradle.kts
https://github.com/gradle/kotlin-dsl/commit/b02916c7160ea45ad1bf7600d5a80c3bdaf6ceb9
https://github.com/gradle/kotlin-dsl/blob/master/samples/copy/build.gradle.kts