I have a Kotlin Multiplatform project and I am trying to add Spring Boot to my Gradle dependencies. When a project is generated from the Spring Initializr it creates the developmentOnly
dependency configuration as seen below. It also creates the testImplementation
dependency configuration.
The first build.gradle.kts
below is my attempt at transferring these to a multiplatform project, which so far hasn't worked. I have marked the lines that have problems with comments, they are towards the bottom of the file. Afterward, I have put a normal Spring Boot build.gradle.kts
for comparison.
How can these be put into a multiplatform project? Or, if they can't be added for some reason, set up the configuration in such a way that the same result is achieved.
plugins {
id("org.springframework.boot") version "2.2.4.RELEASE"
id("io.spring.dependency-management") version "1.0.9.RELEASE"
kotlin("multiplatform") version "1.3.70-eap-184"
kotlin("plugin.spring") version "1.3.70-eap-184"
kotlin("plugin.jpa") version "1.3.70-eap-184"
}
group = "com.test"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_13
java.targetCompatibility = JavaVersion.VERSION_13
repositories {
maven { url = uri("https://dl.bintray.com/kotlin/kotlin-dev/") }
maven { url = uri("https://dl.bintray.com/kotlin/kotlin-eap") }
maven { url = uri("https://kotlin.bintray.com/kotlinx") }
maven { url = uri("https://dl.bintray.com/kotlin/kotlin-js-wrappers") }
mavenCentral()
jcenter()
}
kotlin {
jvm()
js {
browser()
}
}
kotlin.sourceSets["jsMain"].dependencies {
implementation(kotlin("stdlib-js"))
implementation("org.jetbrains:kotlin-react:16.9.0-pre.91-kotlin-1.3.61")
implementation("org.jetbrains:kotlin-react-dom:16.9.0-pre.91-kotlin-1.3.61")
implementation(npm("react", "16.12.0"))
implementation(npm("react-dom", "16.12.0"))
implementation("org.jetbrains:kotlin-styled:1.0.0-pre.91-kotlin-1.3.61")
implementation(npm("styled-components", "5.0.1"))
implementation(npm("inline-style-prefixer", "5.1.1"))
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.3")
}
//The problems begin here
val developmentOnly by configurations.creating
configurations {
runtimeClasspath { //can't resolve runtimeClasspath
extendsFrom(developmentOnly) //can't resolve extendsFrom
}
}
kotlin.sourceSets["jvmMain"].dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.springframework.session:spring-session-core")
developmentOnly("org.springframework.boot:spring-boot-devtools") //error because of above where developmentOnly is defined
runtimeOnly("org.postgresql:postgresql")
testImplementation("org.springframework.boot:spring-boot-starter-test") { //can't resolve testImplementation
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
}
testImplementation("org.springframework.security:spring-security-test") //can't resolve testImplementation
}
Normal build.gradle.kts
with Spring Boot (no issues)
plugins {
id("org.springframework.boot") version "2.2.4.RELEASE"
id("io.spring.dependency-management") version "1.0.9.RELEASE"
war
kotlin("jvm") version "1.3.61"
kotlin("plugin.spring") version "1.3.61"
kotlin("plugin.jpa") version "1.3.61"
}
group = "com.test"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11
java.targetCompatibility = JavaVersion.VERSION_11
val developmentOnly by configurations.creating
configurations {
runtimeClasspath {
extendsFrom(developmentOnly)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
developmentOnly("org.springframework.boot:spring-boot-devtools")
runtimeOnly("com.microsoft.sqlserver:mssql-jdbc")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
}
}
I was able to get this all setup. I made a starter project in case anyone else needs to do the same thing.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.