Nat*_*han 4 java gradle kotlin
我正在使用 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"
}
Run Code Online (Sandbox Code Playgroud)
我在编译过程中收到此错误:
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)
Run Code Online (Sandbox Code Playgroud)
好的,没问题,jackson-module-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"
}
Run Code Online (Sandbox Code Playgroud)
为什么kotlin-stdlib-jdk8拉入我的类路径似乎没有必要kotlin-stdlib-jdk7?
您在编译期间看到的警告发生是因为jackson-module-kotlin:2.9.8依赖项显然kotlin-stdlib:1.3.10带入了类路径,并且该版本覆盖了您在 1.2.71 上声明的依赖项。为避免警告,您应该将您的项目迁移到 Kotlin 1.3.x 或将jackson-module-kotlin依赖项降级到某些依赖于 Kotlin 1.2.x 的先前版本。
kotlin-stdlib-jdk8是在 之上的加法kotlin-stdlib-jdk7,后者是在 之上的加法kotlin-stdlib。您不应排除这些传递依赖项,否则您可能会遇到运行时错误。
| 归档时间: |
|
| 查看次数: |
1182 次 |
| 最近记录: |