diff --git a/kotlin-functional/build.gradle b/kotlin-functional/build.gradle new file mode 100644 index 00000000..9f305d72 --- /dev/null +++ b/kotlin-functional/build.gradle @@ -0,0 +1,21 @@ +plugins { + id 'java' + id 'org.springframework.boot' + id 'org.springframework.aot.smoke-test' + id 'org.graalvm.buildtools.native' + id 'org.jetbrains.kotlin.jvm' + id 'org.jetbrains.kotlin.plugin.spring' version "1.7.10" +} + +dependencies { + implementation(platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)) + implementation("org.springframework.boot:spring-boot-starter") + implementation("org.jetbrains.kotlin:kotlin-reflect") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + + testImplementation("org.springframework.boot:spring-boot-starter-test") + + aotSmokeTestImplementation(project(":aot-smoke-test-support")) + aotSmokeTestImplementation("org.awaitility:awaitility:4.2.0") +} + diff --git a/kotlin-functional/src/aotSmokeTest/java/com/example/functional/FunctionalApplicationAotTests.java b/kotlin-functional/src/aotSmokeTest/java/com/example/functional/FunctionalApplicationAotTests.java new file mode 100644 index 00000000..c595acd9 --- /dev/null +++ b/kotlin-functional/src/aotSmokeTest/java/com/example/functional/FunctionalApplicationAotTests.java @@ -0,0 +1,23 @@ +package com.example.functional; + +import java.time.Duration; + +import org.awaitility.Awaitility; +import org.junit.jupiter.api.Test; + +import org.springframework.aot.smoketest.support.assertj.AssertableOutput; +import org.springframework.aot.smoketest.support.junit.AotSmokeTest; + +import static org.assertj.core.api.Assertions.assertThat; + +@AotSmokeTest +public class FunctionalApplicationAotTests { + + @Test + void expectedLoggingIsProduced(AssertableOutput output) { + Awaitility.await().atMost(Duration.ofSeconds(10)).untilAsserted(() -> { + assertThat(output).hasSingleLineContaining("Hello World"); + }); + } + +} diff --git a/kotlin-functional/src/main/kotlin/com/example/functional/FunctionalApplication.kt b/kotlin-functional/src/main/kotlin/com/example/functional/FunctionalApplication.kt new file mode 100644 index 00000000..98b31e99 --- /dev/null +++ b/kotlin-functional/src/main/kotlin/com/example/functional/FunctionalApplication.kt @@ -0,0 +1,24 @@ +package com.example.functional + +import org.springframework.boot.CommandLineRunner +import org.springframework.boot.autoconfigure.SpringBootApplication +import org.springframework.boot.runApplication +import org.springframework.context.support.beans + +@SpringBootApplication +class FunctionalApplication + +fun main(args: Array) { + runApplication(*args) { + addInitializers(beans { + bean() + }) + } +} + +class Foo : CommandLineRunner { + override fun run(vararg args: String?) { + println("Hello world!") + } +} + diff --git a/settings.gradle b/settings.gradle index 140820ec..d7684990 100644 --- a/settings.gradle +++ b/settings.gradle @@ -69,6 +69,7 @@ include "freemarker-webflux" include "freemarker-webmvc" include "hateoas" include "integration" +include "kotlin-functional" include "jdbc-h2" include "jdbc-mariadb" include "jdbc-mysql"