在Android Studio中构建时如何解决错误“无法解决:org.jetbrains.kotlin:kotlin-stdlib-jre7 ...”

时间:2018-11-23 14:24:38

标签: kotlin

我通过选中Android Studio 3中的“ include kotlin”框创建了一个新项目,并且在开箱时编译时出现错误

oc new-app

我确保所有插件都是最新的,并且正确安装了Android SDK。

有人知道如何解决此错误吗?

4 个答案:

答案 0 :(得分:79)

kotlin-stdlib-jre[7/8]不久前已被弃用,此后已被删除。弃用说明保存到1.2.71,这是发布这些工件的最新版本。官方弃用通知可以在here中找到。使用任何不推荐使用的版本(在删除之前)也应该在(至少)Android Studio和IntelliJ中产生警告。

改为使用kotlin-stdlib-jdk7。它与kotlin-stdlib-jre7的依赖项相同(较新的依赖项除外),但已重命名为kotlin-stdlib-jdkkotlin-stdlib-jre现在不再维护为单独的依赖项。

IntelliJ和Android Studio当前都使用kotlin-stdlib-jre7生成新项目; 这可能是一个错误。他们可能尚未更新项目生成器。因此,您必须手动将依赖项替换为可用的依赖项,直到他们解决此问题。这取决于Kotlin插件。如果没有,请更新它。 我还没有检查是否已打补丁-如果已打补丁,那只能解决创建新项目的问题。对于从旧版本进行更新,其余答案仍然适用

如果您使用的是1.2.71或更低版本,并且要升级到1.3.0或更高版本,那么您自然就必须这样做。

这些是自Kotlin 1.3.0起新的有效依赖项:

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

$kotlinVersion是包含版本或硬编码版本(即1.3.0)的变量


或者,您可以使用the "plain" stdlibkotlin-stdlib)来代替特定于JDK的版本。但是您必须以任何一种方式更改依赖关系,因此建议您使用kotlin-stdlib-jdk7,或者如果您打算使用Java 8,则kotlin-stdlib-jdk8

依赖性的最新版本也可以在here中找到。 jdk7,jdk8和特定于版本的stdlib都遵循相同的版本(根据此编辑-将来可能会更改,但是在更改发生之前可能会出现通知),因此是否检查jdk8,jdk7或通常,所有版本都应该在stdlib工件之间通用。

其他构建系统的注意事项

相同的实际解决方案也适用于其他构建系统,但是代码不同。由于构建系统很多,因此我将不包括所有构建系统,但是重点是将工件从kotlin-stdlib-jre[num]更改为kotlin-stdlib-jdk[num](当然没有括号)。或者,如前所述,kotlin-stdlib

与构建系统无关,它基于对Maven Central和类似存储库的访问。如果您的构建系统不支持它,并且/或者破坏了Maven样式的约定和存储库,那么您将必须找到适用于您的构建系统的东西。

TL; DR:

改为使用org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_versionorg.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version(取决于您最初使用的版本)。

答案 1 :(得分:10)

从build.gradle中删除此行:

if (v1.x==-v2.x&&v1.y==-v2.y) return Math.PI

在build.gradle中添加此行:

function angle(origin, p1, p2, sign=false){
    if (p1.x==p2.x && p1.y==p2.y) return 0
    if (p1.x==-p2.x && p1.y==-p2.y) return Math.PI
    const a = {x: p1.x-origin.x, y: p1.y-origin.y}
    const b = {x: p2.x-origin.x, y: p2.y-origin.y}
    sign = sign && a.x*b.y < a.y*b.x ? -1 : 1
    return sign * Math.acos(
        (a.x*b.x+a.y*b.y)/(Math.sqrt(a.x**2+a.y**2)*Math.sqrt(b.x**2+b.y**2))
    )
}

在项目级别更新build.gradle版本: kotlin version ='1.3.0'

答案 2 :(得分:0)

答案 3 :(得分:-1)

build.gradle Module:app )中替换

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

并在 build.gradle Module:project )中将版本更改为

ext.kotlin_version = '1.3.0'