2017-12-25 4 views
1

Problem

Ich versuche, die neueste Version Kotlin (1.2.10) mit auch zu laufen, die neueste Federverschluß (2.0.0.M7). In der lokalen Umgebung alles ist in Ordnung, aber -boottime intellij schreit: enter image description hereFrühlings-Boot 2 & Kotlin 1.2.1: veraltete wersion der Laufzeit

ich Outdated Kotlin Runtime gesehen haben, aber meiner Meinung nach ist es nicht verbunden, so ... Das ist verdächtig wegen meiner folgenden build.gradle, wo es ist nur eine Version von Kotlin (nur rechts) [Frontend ist auch gradle Build aber node.js ein - eckig, nicht 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') 
} 

und das beunruhigt mich in Build wegen warnen (und nicht in Tests wie ich denke):

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 

Test:

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() { 
    } 

} 

Jede mögliche Hilfe geschätzt :) PS: JDK 8


Lösung

Ich habe folgende Zeilen in build.gradle Skript hinzugefügt:

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}") 

und funktioniert wie ein Zauber. Tests gestoppt versagt, wenn ich

ersetzt
@RunWith(SpringRunner::class) 

mit

@ExtendWith(SpringExtension::class) 
+0

Wie wurde Ihr IntelliJ-Projekt erstellt? Hast du wie vorgeschlagen getan und Abhängigkeit für Kotlin gesehen? Haben Sie sich Modul- und Bibliotheksdefinitionen angesehen? Ich nehme an, es liegt daran, dass Sie das Idea-Plugin für Gradle verwendet haben, um das Projekt zu generieren, und es wurde eine ältere Version von Kotlin zum Bibliothekspfad hinzugefügt. Ich würde empfehlen, Gradle-Projekte direkt in IntelliJ zu importieren und das Ideen-Plugin für Gradle nicht mehr zu verwenden. – Mikezx6r

Antwort

2

Einer Ihrer Abhängigkeiten selbst auf kotlin-stdlib-jre7 abhängt. Soweit Gradle weiß, sind kotlin-stdlib-jre7 und kotlin-stdlib-jre8 völlig unabhängig voneinander, so dass es beide auf den Klassenpfad setzt, was zum Konflikt führt.

Versuchen Sie ./gradlew dependencyInsight kotlin-stdlib-jre7 zu sehen, woher die Abhängigkeit kommt und exclude it. Z.B. wenn es stellt sich jackson-module-kotlin erwiesen, schreiben

compile('com.fasterxml.jackson.module:jackson-module-kotlin:2.9.2') { 
    exclude group: "org.jetbrains.kotlin" 
} 

Siehe auch https://docs.gradle.org/current/userguide/dependency_management.html#sub:version_conflicts.

+0

Ich habe gerade Deps zu den tatsächlichen Versionen dieser Bibliotheken hinzugefügt (1.2.1), weil sogar 'kotlin-stdlib-jre8' von jre7 abhängt ... aber der Test schlägt immer noch fehl. Trotzdem danke :) – Azbesciak

+0

@azbesciak. Hat das dein Problem gelöst? Wenn nicht, dann sollte es nicht die akzeptierte Antwort sein. Wenn dies der Fall ist, aktualisieren Sie bitte etwas, um zu verdeutlichen, wie dies Ihr Problem gelöst hat, um anderen zu helfen. – Mikezx6r

+0

Es half mir, das Problem mit IDE-Problem zu lösen, nicht mit Tests .. aber es ist andere Geschichte, wie ich denke, vielleicht mit https://github.com/waicool20/KAGA/issues/27 verbunden, wie ich denke, jetzt auf meine lokales Gebäude – Azbesciak

2

Nach What's New in Kotlin 1.2 gibt es neue Abhängigkeiten für Java 7 und 8, e. G. kotlin-stdlib-jdk8 anstelle der alten kotlin-stdlib-jre8. Mit dieser Option wird der vorübergehende Import für kotlin-stdlib-jdk7 automatisch korrigiert, aber leider nicht für kotlin-stdlib. Es ist immer noch 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) 

Sie könnten zusätzlich kotlin-stdlib mit einer expliziten Version erklären die Warnung zu beheben.

compile("org.jetbrains.kotlin:kotlin-stdlib:1.2.10") 
compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8") 
+0

... was ich getan habe, lesen Sie die Kommentare :) – Azbesciak

+1

@Azbesciak bitte beachten Sie den kleinen Unterschied (jdk vs jre). Du hast das nicht erwähnt und ich dachte, das könnte jemandem helfen. – sepe

+0

Es ist immer besser, es explizit zu sagen :) Du hast recht, ich nicht. – Azbesciak