我正在尝试使用最新的春季启动(2.0.0.M7)运行最新的kotlin版本(1.2.10)。 在当地的环境中一切都很好,但是-boottime intellij哭了:
我见过Outdated Kotlin Runtime,但在我看来它并没有这样连接......这是可疑的,因为我的后续build.gradle,只有一个版本的kotlin(只有一个)[前端]也是gradle构建但是node.js是一个 - 有角度的,没有kotlin deps]:
buildscript {
ext {
kotlinVersion = '1.2.10'
springBootVersion = '2.0.0.M7'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/libs-milestone-local" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
classpath 'org.springframework:springloaded:1.2.6.RELEASE'
}
}
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'
group = 'com.witkups'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
idea {
module {
inheritOutputDirs = false
outputDir = file("$buildDir/classes/main/")
}
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/libs-milestone-local" }
}
dependencies {
compile project(":frontend")
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-webflux')
compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
runtime('org.springframework.boot:spring-boot-devtools')
runtime('com.microsoft.sqlserver:mssql-jdbc')
compile('com.fasterxml.jackson.datatype:jackson-datatype-jsr310')
compile('com.fasterxml.jackson.module:jackson-module-kotlin:2.9.2')
compile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
compile("io.jsonwebtoken:jjwt:0.7.0")
testCompile('com.h2database:h2')
testCompile('org.springframework.security:spring-security-test')
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('io.projectreactor:reactor-test')
}
这让我担心因为构建中的警告(并且我猜测测试失败):
w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
/home/travis/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.2.10/19bc012f8c4cd6b705bd6512263777cc19bcf259/kotlin-reflect-1.2.10.jar (version 1.2)
/home/travis/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre8/1.2.10/71c98c16b4bed3f754c6c398f9da8300ecb0a669/kotlin-stdlib-jre8-1.2.10.jar (version 1.2)
/home/travis/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre7/1.1.61/59dfce93b1995717338435dd974884007d8e8474/kotlin-stdlib-jre7-1.1.61.jar (version 1.1)
/home/travis/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.61/fa7813a26c548c9c412dd2d42fb466cfcd8dcf3c/kotlin-stdlib-1.1.61.jar (version 1.1)
w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath or use '-Xskip-runtime-version-check' to suppress this warning
:spring-boot-server:compileTestJava NO-SOURCE
:spring-boot-server:processTestResources
:spring-boot-server:testClasses
:spring-boot-server:testPicked up _JAVA_OPTIONS: -Xmx2048m -Xms512m
com.witkups.carsharing.CarSharingApplicationTests > contextLoads FAILED
java.lang.IllegalStateException
Caused by: java.lang.IllegalStateException
Caused by: java.lang.NoClassDefFoundError
Caused by: java.lang.ClassNotFoundException
1 test completed, 1 failed
:spring-boot-server:test FAILED
试验:
package com.witkups.carsharing
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
@RunWith(SpringRunner::class)
@SpringBootTest
class CarSharingApplicationTests {
@Test
fun contextLoads() {
}
}
任何帮助将不胜感激:) PS:JDK 8
<小时/>
我在build.gradle
脚本中添加了以下行:
compile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
compile("org.jetbrains.kotlin:kotlin-stdlib-jre8:${kotlinVersion}")
compile("org.jetbrains.kotlin:kotlin-stdlib-jre7:${kotlinVersion}")
compile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}")
并且像魅力一样。 当我替换
时,测试停止失败@RunWith(SpringRunner::class)
带
@ExtendWith(SpringExtension::class)
答案 0 :(得分:4)
您的某个依赖项本身取决于kotlin-stdlib-jre7
。就Gradle而言,kotlin-stdlib-jre7
和kotlin-stdlib-jre8
完全不相关,因此它将两者放在类路径上,从而导致了condlict。
尝试./gradlew dependencyInsight kotlin-stdlib-jre7
查看依赖项的来源和exclude it。例如。如果结果是jackson-module-kotlin
,请写
compile('com.fasterxml.jackson.module:jackson-module-kotlin:2.9.2') {
exclude group: "org.jetbrains.kotlin"
}
另见https://docs.gradle.org/current/userguide/dependency_management.html#sub:version_conflicts。
答案 1 :(得分:4)
根据What's New in Kotlin 1.2,Java 7和8有新的依赖关系,例如: G。 kotlin-stdlib-jdk8
代替旧版kotlin-stdlib-jre8
。使用此功能可自动修复kotlin-stdlib-jdk7
的瞬态导入,但不幸的是kotlin-stdlib
。它仍然是1.1.61
。
./gradlew dependencyInsight --dependency kotlin-stdlib
> Task :dependencyInsight
org.jetbrains.kotlin:kotlin-stdlib:1.1.61 (selected by rule)
org.jetbrains.kotlin:kotlin-stdlib:1.2.10 -> 1.1.61
+--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.10
| \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10
| \--- compileClasspath
\--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10 (*)
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.10
\--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10
\--- compileClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.10 (selected by rule)
org.jetbrains.kotlin:kotlin-stdlib-jdk8: -> 1.2.10
\--- compileClasspath
(*) - dependencies omitted (listed previously)
您还可以使用显式版本声明kotlin-stdlib
来修复警告。
compile("org.jetbrains.kotlin:kotlin-stdlib:1.2.10")
compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")