Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Kotlin JDK8在类路径上也包含Kotlin JDK7? 我用Kotlin来构建一个Web服务,我偶然发现了我认为是一种奇怪的好奇心。使用此build.gradle: group 'com.example' version '0.1.0' buildscript { ext.kotlinVersion = '1.2.71' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } apply plugin: 'kotlin' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" compile 'com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8' } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }_Java_Gradle_Kotlin - Fatal编程技术网

Java 为什么Kotlin JDK8在类路径上也包含Kotlin JDK7? 我用Kotlin来构建一个Web服务,我偶然发现了我认为是一种奇怪的好奇心。使用此build.gradle: group 'com.example' version '0.1.0' buildscript { ext.kotlinVersion = '1.2.71' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } apply plugin: 'kotlin' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" compile 'com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8' } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }

Java 为什么Kotlin JDK8在类路径上也包含Kotlin JDK7? 我用Kotlin来构建一个Web服务,我偶然发现了我认为是一种奇怪的好奇心。使用此build.gradle: group 'com.example' version '0.1.0' buildscript { ext.kotlinVersion = '1.2.71' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } apply plugin: 'kotlin' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" compile 'com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8' } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" },java,gradle,kotlin,Java,Gradle,Kotlin,我在编译过程中遇到此错误: w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath: .../kotlin-stdlib-jdk8-1.2.71.jar (version 1.2) .../kotlin-stdlib-jdk7-1.2.71.jar (version 1.2) .../kotlin-reflect-

我在编译过程中遇到此错误:

w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
    .../kotlin-stdlib-jdk8-1.2.71.jar (version 1.2)
    .../kotlin-stdlib-jdk7-1.2.71.jar (version 1.2)
    .../kotlin-reflect-1.3.10.jar (version 1.3)
    .../kotlin-stdlib-1.3.10.jar (version 1.3)
    .../kotlin-stdlib-common-1.3.10.jar (version 1.3)
好的,没问题,
jackson模块kotlin
正在引入kotlin 1.3依赖项。我可以排除他们。但引起我注意的是第二行
kotlin-stdlib-jdk8
也在拉入
kotlin-stdlib-jdk7
。事实上,我可以将其排除在外,但一切仍按预期运行:

compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") {
    exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk7"
}

为什么
kotlin-stdlib-jdk8
会把看似不必要的
kotlin-stdlib-jdk7
拉到我的类路径上?

kotlin-stdlib-jdk8常见的
kotlin-stdlib-jdk7
kotlin-stdlib-jdk8
似乎与我在罐子里看到的东西是相互排斥的。这就是为什么即使使用jdk8,也需要jdk7工件

kotlin-stdlib-jdk7
jar只包含jdk7中添加的东西,如
AutoCloseable
和其他内部api。这不包括在JDK8工件中,它只包括在JDK8中添加的东西


如果不使用
use
closeFinally
全局函数,代码在没有jdk7工件的情况下应该可以正常工作,但是没有真正的理由排除这个jar IMHO。

编译过程中出现的警告是因为
jackson模块kotlin:2.9.8
依赖项显然将
kotlin stdlib:1.3.10
引入类路径,并且该版本覆盖了您在1.2.71上声明的依赖项。为了避免警告,您应该将项目迁移到Kotlin 1.3.x,或者将依赖于Kotlin 1.2.x的jackson module Kotlin降级到某个早期版本


kotlin-stdlib-jdk8
是在
kotlin-stdlib-jdk7
之上添加的,后者是在
kotlin stdlib
之上添加的。您不应该排除这些可传递的依赖项,否则可能会出现运行时错误。

我相信它们只是在jdk8依赖项中包含了java 8特定的内容,而将所有java 7+内容都保留在jdk7依赖项中。所以你需要两者都有完整的stdlib。我想你也有普通的stdlib,不是吗?谢谢。“
kotlin-stdlib-jdk8
是在
kotlin-stdlib-jdk7
的基础上添加的,后者是在
kotlin-stdlib
的基础上添加的。”这是我正在寻找的答案。正如我在问题中提到的,我知道错误的原因是
jackson module kotlin
。请注意,如果
jackson module kotlin
使用kotlin 1.3中添加的一些新函数,它在运行时将无法与kotlin 1.2.x依赖项一起工作。