{"id":19656322,"url":"https://github.com/daggerok/spring-boot-gradle-kotlin-dsl-example","last_synced_at":"2025-04-28T18:32:51.868Z","repository":{"id":39451004,"uuid":"171961251","full_name":"daggerok/spring-boot-gradle-kotlin-dsl-example","owner":"daggerok","description":"It's really time to migrate your Gradle build from Groovy to Kotlin. Example for Spring Boot and more!","archived":false,"fork":false,"pushed_at":"2019-04-08T03:24:20.000Z","size":1153,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-05T10:23:10.435Z","etag":null,"topics":["gradle-kotlin","gradle-kotlin-dsl","spring-boot","travis-ci","vuepress"],"latest_commit_sha":null,"homepage":"https://daggerok.github.io/spring-boot-gradle-kotlin-dsl-example/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daggerok.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-21T23:29:03.000Z","updated_at":"2022-12-28T11:17:24.000Z","dependencies_parsed_at":"2022-09-16T06:01:05.229Z","dependency_job_id":null,"html_url":"https://github.com/daggerok/spring-boot-gradle-kotlin-dsl-example","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daggerok%2Fspring-boot-gradle-kotlin-dsl-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daggerok%2Fspring-boot-gradle-kotlin-dsl-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daggerok%2Fspring-boot-gradle-kotlin-dsl-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daggerok%2Fspring-boot-gradle-kotlin-dsl-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daggerok","download_url":"https://codeload.github.com/daggerok/spring-boot-gradle-kotlin-dsl-example/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251366130,"owners_count":21578079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gradle-kotlin","gradle-kotlin-dsl","spring-boot","travis-ci","vuepress"],"created_at":"2024-11-11T15:27:26.470Z","updated_at":"2025-04-28T18:32:51.553Z","avatar_url":"https://github.com/daggerok.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# spring-boot + gradle-kotlin-dsl\nSpring Boot Gradle Kotlin DSL starter\n\n[[toc]]\n\n\u003c!--\n## Table of Content\n\n  * [Spring Boot](#Spring-Boot)\n    * [plugins definition](#plugins-definition)\n    * [dependencies](#dependencies)\n    * [executable artifact](#executable-artifact)\n    * [kotlin](#kotlin)\n    * [override parent versions](#override-parent-versions)\n    * [war](#war)\n  * [JUnit / Jupiter (GitHub)](#JUnit--Jupiter) [JUnit / Jupiter (VuePress)](#JUnit-Jupiter)\n  * [java \u003c-\u003e kotlin (GitHub)](#java---kotlin) [java \u003c-\u003e kotlin (VuePress)](#java-kotlin)\n  * [Wrapper](#Wrapper)\n  * [NodeJS](#NodeJS)\n  * [docker](#docker)\n  * [create sources.zip](#create-sources-zip)\n  * [links and resources](#links-and-resources)\n--\u003e\n\n- Travis CI status: [![Build Status](https://travis-ci.org/daggerok/spring-boot-gradle-kotlin-dsl-example.svg?branch=master)](https://travis-ci.org/daggerok/spring-boot-gradle-kotlin-dsl-example)\n- Documentation on [GitHub Pages](https://daggerok.github.io/spring-boot-gradle-kotlin-dsl-example/)\n- GitHub [daggerok/spring-boot-gradle-kotlin-dsl-example](https://github.com/daggerok/spring-boot-gradle-kotlin-dsl-example) repository \n\n## Spring Boot \n\n### plugins definition\n\n_build.gradle.kts_\n\n```kotlin\nplugins {\n  id(\"org.jetbrains.kotlin.jvm\").version(\"1.3.21\")\n  id(\"org.jetbrains.kotlin.plugin.spring\").version(\"1.3.21\")\n  id(\"org.springframework.boot\").version(\"2.2.0.BUILD-SNAPSHOT\")\n}\n\napply(plugin = \"war\")\napply(plugin = \"io.spring.dependency-management\")\n\nrepositories {\n  mavenCentral()\n  maven(url = \"https://repo.spring.io/snapshot\")\n  maven(url = \"https://repo.spring.io/milestone\")\n}\n```\n\n_settings.gradle.kts_\n\n```kotlin\npluginManagement {\n  repositories {\n    gradlePluginPortal()\n    maven(url = \"https://repo.spring.io/snapshot\")\n    maven(url = \"https://repo.spring.io/milestone\")\n    gradlePluginPortal()\n  }\n  resolutionStrategy {\n    eachPlugin {\n      if (requested.id.id == \"org.springframework.boot\") {\n        useModule(\"org.springframework.boot:spring-boot-gradle-plugin:${requested.version}\")\n      }\n    }\n  }\n}\n```\n\n::: tip\nwe need this because we wanna use spring 2.2.0-BUILD-SNAPSHOT version\n:::\n\n### dependencies\n\n_build.gradle.kts_\n\n```kotlin\ndependencies {\n  implementation(\"org.springframework.boot:spring-boot-starter-hateoas\")\n  implementation(\"org.springframework.boot:spring-boot-starter-webflux\")\n  implementation(\"org.springframework.boot:spring-boot-starter-actuator\")\n  implementation(\"org.springframework.boot:spring-boot-starter\")\n  annotationProcessor(\"org.projectlombok:lombok\")\n  testAnnotationProcessor(\"org.projectlombok:lombok\")\n  annotationProcessor(\"org.springframework.boot:spring-boot-configuration-processor\")\n  testAnnotationProcessor(\"org.springframework.boot:spring-boot-configuration-processor\")\n  runtimeOnly(\"org.springframework.boot:spring-boot-devtools\")\n  testImplementation(\"org.springframework.boot:spring-boot-starter-test\")\n  testImplementation(\"io.projectreactor:reactor-test\")\n}\n```\n\n### executable artifact\n\n_build.gradle.kts_\n\n```kotlin\ntasks.withType\u003corg.springframework.boot.gradle.tasks.bundling.BootJar\u003e().configureEach {\n  launchScript()\n}\n```\n\n### kotlin\n\n_build.gradle.kts_\n\n```kotlin\ntasks.withType\u003corg.jetbrains.kotlin.gradle.tasks.KotlinCompile\u003e().configureEach {\n  kotlinOptions {\n    freeCompilerArgs += \"-Xjsr305=strict\"\n    jvmTarget = JavaVersion.VERSION_1_8.toString()\n  }\n}\n\ndependencies {\n  implementation(\"org.jetbrains.kotlin:kotlin-reflect\")\n  implementation(\"org.jetbrains.kotlin:kotlin-stdlib-jdk8\")\n  implementation(\"com.fasterxml.jackson.module:jackson-module-kotlin\")\n}\n```\n\n### override parent versions\n\n_build.gradle.kts_\n\n```kotlin\nval kotlinVersion = \"1.3.21\"\nval junitJupiterVersion = \"5.4.0\"\n\nextra[\"kotlin.version\"] = kotlinVersion\nextra[\"junit-jupiter.version\"] = junitJupiterVersion\n```\n\n## war\n\n_build.gradle.kts_\n\n```kotlin\nplugins {\n  id(\"war\")\n}\n\ntasks.withType\u003cBootWar\u003e().configureEach {\n  launchScript()\n}\n```\n\n_ServletInitializer.kt_\n\n```kotlin\nclass ServletInitializer : SpringBootServletInitializer() {\n  override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder {\n    return application.sources(SptingBootGradleKotlinDslExampleApplication::class.java)\n  }\n}\n```\n\n_build and run executable WAR artifact_\n\n```bash\n./gradlew build\nbash ./build/libs/*.war\n```\n\n## JUnit / Jupiter\n\n_build.gradle.kts_\n\n```kotlin\ndependencies {\n  testImplementation(\"junit:junit\")\n  testAnnotationProcessor(\"org.projectlombok:lombok\")\n  testImplementation(platform(\"org.junit:junit-bom:$junitJupiterVersion\"))\n  testImplementation(\"org.junit.jupiter:junit-jupiter-api\")\n  testRuntimeOnly(\"org.junit.jupiter:junit-jupiter-engine\")\n  testRuntimeOnly(\"org.junit.vintage:junit-vintage-engine\")\n  testRuntime(\"org.junit.platform:junit-platform-launcher\")\n}\n\ntasks.withType\u003cTest\u003e {\n  useJUnitPlatform()\n  testLogging {\n    showExceptions = true\n    showStandardStreams = true\n    events(PASSED, SKIPPED, FAILED)\n  }\n}\n```\n\n## java \u003c-\u003e kotlin\n\n_don't miss your `src/*/kotlin/**.java` and `src/*/java/**.kt` sources files location!_\n\n```kotlin\nsourceSets {\n  main {\n    java.srcDir(\"src/main/kotlin\")\n  }\n  test {\n    java.srcDir(\"src/test/kotlin\")\n  }\n}\n```\n\n## Wrapper\n\n_build.gradle.kts_\n\n```kotlin\ntasks.withType\u003cWrapper\u003e().configureEach {\n  gradleVersion = gradleVersion\n  distributionType = Wrapper.DistributionType.BIN\n}\n```\n\n_re-generate gradle wrapper_\n\n```bash\n./gradlew :wrapper\n```\n\n## NodeJS\n\n_build.gradle.kts_\n\n```kotlin\nplugins {\n  id(\"com.moowork.node\") version \"1.2.0\"\n}\n\nnode {\n  download = true\n  version = \"10.9.0\"\n  npmVersion = \"6.9.0\"\n}\n\ntasks.create(\"start\")\ntasks[\"start\"].dependsOn(\"npm_start\")\ntasks[\"npm_start\"].dependsOn(\"npm_i\")\ntasks[\"build\"].dependsOn(\"npm_run_build\")\ntasks[\"npm_run_build\"].dependsOn(\"npm_install\")\n```\n\n_run 'npm start' by using gradle node plugin_\n\n```bash\n./gradlew start\n```\n\n_build VuePress documentation_\n\n```bash\n./gradlew npm_run_build\n```\n\n## docker\n\n_docker-compose.yaml_\n\n```yaml\nversion: \"3.7\"\nservices:\n  app:\n    image: openjdk:8u191-jdk-alpine3.9\n    volumes: [\"./build/libs:/tmp/app\"]\n    ports: [\"8080:8080\"]\n    networks: [app-network]\n    command: ash -c \"java -jar /tmp/app/*.war\"\n    healthcheck:\n      disable: true\nnetworks:\n  app-network:\n    driver: bridge\n```\n\n_build.gradle.kts_\n\n```kotlin\nplugins {\n  id(\"com.avast.gradle.docker-compose\").version(\"0.8.14\")//.apply(false)\n}\n\nval dockerPs: Task = tasks.create\u003cExec\u003e(\"dockerPs\") {\n  dependsOn(\"assemble\")\n  shouldRunAfter(\"assemble\")\n  executable = \"docker\"\n  args(\"ps\", \"-a\", \"-f\", \"name=${project.name}\")\n}\n\napply(plugin = \"com.avast.gradle.docker-compose\")\n\ndockerCompose {\n  isRequiredBy(dockerPs)\n}\n```\n\n_run and test_\n\n```bash\n./gradlew composeUp\nhttp :8080/actuator\n./gradlew composeDown\n```\n\n## create sources.zip\n\n```kotlin\n\ntasks {\n  getByName(\"clean\") {\n    doLast {\n      delete(project.buildDir)\n    }\n  }\n}\n\ntasks.create\u003cZip\u003e(\"sources\") {\n  dependsOn(\"clean\")\n  shouldRunAfter(\"clean\")\n  description = \"Archives sources in a zip file\"\n  group = \"Archive\"\n  from(\"src\") {\n    into(\"src\")\n  }\n  from(\"build.gradle.kts\")\n  from(\"settings.gradle.kts\")\n  from(\".vuepress\") {\n    into(\".vuepress\")\n  }\n  from(\"README.md\")\n  from(\"package.json\")\n  archiveFileName.set(\"${project.buildDir}/sources-${project.version}.zip\")\n}\n```\n\n## links and resources\n\n- [from groovy to kotlin DSL gradle migration guide (nice but little bit old)](https://github.com/jnizet/gradle-kotlin-dsl-migration-guide)\n- [bmuschko docker plugins](https://bmuschko.github.io/gradle-docker-plugin/)\n- [gradle docker-compose plugin](https://github.com/avast/gradle-docker-compose-plugin)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaggerok%2Fspring-boot-gradle-kotlin-dsl-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaggerok%2Fspring-boot-gradle-kotlin-dsl-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaggerok%2Fspring-boot-gradle-kotlin-dsl-example/lists"}