错误:在Ionic 3中找不到org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25


81

在为Android构建Ionic 3应用程序时,突然出现以下错误。

Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25

我们已经从Android Studio中的一个解决方案在这里,但我在我的build.gradle没有变化用下面的代码后,我仍然得到错误。

buildscript {
    repositories {
        ...
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }
}

allprojects {
    repositories {
        ...
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }
}

更新Cordova并添加上述解决方案后,我的build.gradle文件如下所示。

buildscript {
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    dependencies {
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        classpath 'com.android.tools.build:gradle:3.3.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    //This replaces project.properties w.r.t. build settings
    project.ext {
      defaultBuildToolsVersion="28.0.3" //String
      defaultMinSdkVersion=19 //Integer - Minimum requirement is Android 4.4
      defaultTargetSdkVersion=28 //Integer - We ALWAYS target the latest by default
      defaultCompileSdkVersion=28 //Integer - We ALWAYS compile with the latest by default
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

还是一样的错误。


您是否真的放入...并删除了已经存在的其他存储库?
ianhanniballake

不,我只是更改了Maven网址。
Tapas Mukherjee

那么,如果不是您发布的build.gradle文件,它实际上是什么样子?因为您的错误消息是说您删除了存储库所在gradle:3.0.1的位置。
ianhanniballake

请检查说明。我添加了我的build.gradle代码。我只是替换了网址。
Tapas Mukherjee

您应该只添加新行,而不替换任何现有行。您替换了哪条线?
ianhanniballake

Answers:


75

问题出在cordova-support-google-servicesCordova 的插件上。

build.gradle截至今天(2019年10月24日),此插件的外观如下:

dependencies {
    classpath 'com.android.tools.build:gradle:+'
    classpath 'com.google.gms:google-services:4.2.0'
}

更确切地说,问题出在这种依赖性上:

classpath 'com.android.tools.build:gradle:+'

这是指定依赖项的一种极其脆弱的方法。这里的“ +”号表示“获取回购中可用的最新版本”。如果在存储库中发布了较新的版本,并且该版本破坏了构建,则使用此插件的每个人的项目都将被破坏。今天发生了。正在获取的残破版本是com.android.tools.build:gradle:4.0.0。它需要一些Kotlin的东西。

这就是为什么您需要始终冻结依赖项以可靠地构建项目的原因。永远不要相信新事物。就像昨天一样,此依赖项编译良好:

classpath 'com.android.tools.build:gradle:3.5.1'

对于使用Cordova或Ionic的用户,您可以通过冻结文件中的依赖项来进行快速修复以构建项目:

<projectroot>/platforms/android/cordova-support-google-services/<project>-build.gradle

但是,这不是确定的解决方案。如果您通过Cordova重新安装android平台,该错误将再次显示。项目维护者应冻结依赖关系或对其进行修复以支持gradle 4.0.0。同时,只需使用此插件的固定分叉即可。


在我们谈论临时解决方案时,这对我来说是最快,最说明性的解决方案。谢谢
Tapas Mukherjee

但我有个问题。如果我的应用程序已经构建并且安装在手机中,则可以使用依赖项中的“ +”来中断该应用程序的作用吗?应用程序中有很多依赖项,很难维护所有依赖项的版本。
Tapas Mukherjee

1
我使用Phonegap Build编译应用程序;尽管没有包含插件“ cordova-support-google-services”,但仍收到相同的错误。有什么建议么?特别是,如何在config.xml文件中解决此问题?
彼得,

1
@peterk此处为phonegap构建社区
r1si

3
插件cordova-support-google-services已经发布了新版本^ 1.3.2,他在那里冻结了解决问题的依赖项。答案应该更新以反映这一点。
le0diaz

30

编辑10/28/19:

cordova-support-google-services今天更新为版本1.3.2,该版本将类路径从 classpath 'com.android.tools.build:gradle:+'

classpath 'com.android.tools.build:gradle:3.+'

这似乎修复了kotlin错误

原始答案

我通过执行以下操作成功构建了我的:

我编辑了平台-> android-> cordova-support-google-services-> myAppName-build.gradle

并改变了

maventCentral()

    maven { url "https://maven.google.com" }
    maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }

那解决了kotlin错误,然后我得到了另一个错误,通过更改

classpath 'com.google.gms:google-services:4.2.0'

classpath 'com.google.gms:google-services:4.1.0'

然后,它成功构建。


不得不改变<<到doLast在平台/安卓/应用/的build.gradle,根据stackoverflow.com/a/55793096/2393822
umadesign

2
@JimBergman我从官方Android工作室网站科特林网址:参考androidstudio.googleblog.com/2019/10/...
DanielRead

1
向下滚动到标题为“缺少Kotlin Maven回购的已知问题”的部分
-DanielRead

@DanielRead谢谢,我现在明白了。仍然不要认为在bintray.com中引用文件是解决此问题的方法。上述史密斯先生的解决方案要好得多。
Jim Bergman

1
要更新插件,请运行: cordova plugin rm cordova-support-google-services --force && cordova plugin add cordova-support-google-services
Klemens Zleptnig,

29

这是解决方案。

问题恰好是maven存储库(在此处),但是问题出在cordova-support-google-services插件中的build.gradle ,所以我添加了所需的行,现在一切正常,我已经创建了一个pull要求原始回购(此处)。但是与此同时,您可以执行我的操作,只需将package.json中的当前版本替换为我的仓库即可:

之前:

...
"cordova-support-google-services": "^1.3.1",
...

后:

...
"cordova-support-google-services": "https://github.com/LuisEGR/cordova-support-google-services.git",
...

之后,您将必须:

  • 删除文件夹平台插件
  • npm install

这是一个临时解决方案,可以接受对主存储库的拉取请求,并更新npm包

就是这样,现在您可以再次构建项目。


我正在使用Ionic 4,有些插件需要使用cordova-support-google-services,以防万一您的package.json中没有该错误,可能是其他插件造成的,如果是的话,请添加package.json,以便我们找出哪个是问题。


更新24 / OCT:

我已经按照许多人的建议在仓库中更改了解决方案,现在该解决方案仅用于解决依赖项:从:com.android.tools.build :gradle:+ 到类路径com.android.tools.build:gradle: 3. +,如果您想查看更改内容,这已经在我的仓库中


某人批准该回购协议上的内容通常需要多长时间?
AndySousa

7

在我的项目中,我这样修复。(我在科特林的项目)

buildscript{

    repositories {
         google()
         jcenter()
         ......
         maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

}

allprojects {
    repositories {
         google()
         jcenter()
         ......
         maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
   }
}

6

离子v3和Cordova的解决方案

@史密斯先生解决方案解决了我的问题

你必须去文件

platforms/android/cordova-support-google-services

然后

更换

classpath 'com.android.tools.build:gradle:+'

通过

classpath 'com.android.tools.build:gradle:3.5.1'

我发现的@替代解决方案是

setup kotlin in your system :)

有用。谢谢。我认为,我们可以设置的版本相同,从文件的build.gradle版本
阮陈

1
@NguyenTran如果您要使用最新的Gradle,我认为使用android studio在系统中设置Kotlin是最先进,最好的解决方案,否则,请坚持使用项目支持的较早版本gradle。或寻找对ionic v3的最佳gradle支持。
Mohd Ali,

5

作为对@MisterSmith 的建议采取后续措施的进一步临时解决方案,请使用钩子重新应用该锁:

<hook src="scripts/fix_android_dep.sh" type="after_platform_add"/>

用这个过于冗长的bash代码:

#!/usr/bin/env bash

## temporary fix for android studio EAP issue
## SOURCE: https://stackoverflow.com/a/58536638/56545
if [ -d "platforms/android/cordova-support-google-services" ]; then
  file="platforms/android/cordova-support-google-services/app-build.gradle"
  from="classpath 'com.android.tools.build:gradle:+'"
  to="classpath 'com.android.tools.build:gradle:3.5.1'"

  change=`sed "s/$from/$to/" < "$file"`
  echo "$change" > "$file"
fi

1
改变后的工作对我来说app-build.gradle%MY_APP_NAME%-build.gradle。谢谢!
亚历山大·钦丘克


2

以上都不对我有用。我最终删除了google-services插件并添加了它。

cordova plugin rm cordova-support-google-services cordova plugin add cordova-support-google-services


这是真正解决问题的唯一答案。删除和添加插件会更正应在build.gradle文件上更正的所有内容。
费利佩·费里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.