每次尝试为我的 React Native 项目运行“react-native run-android”或“./gradlew bundleRelease”时,我都会收到错误。
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':app:collectReleaseDependencies'.
> Could not resolve all task dependencies for configuration ':app:releaseRuntimeClasspath'.
> Could not resolve org.webkit:android-jsc:+.
Required by:
project :app
> Failed to list versions for org.webkit:android-jsc.
> Unable to load Maven meta-data from https://jcenter.bintray.com/org/webkit/android-jsc/maven-metadata.xml.
> Could not HEAD 'https://jcenter.bintray.com/org/webkit/android-jsc/maven-metadata.xml'.
> Read timed out
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 2m 37s
这是我的 build.gradle 文件:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "29.0.3"
minSdkVersion = 24
compileSdkVersion = 30
targetSdkVersion = 30
supportLibVersion = "28.0.0"
googlePlayServicesAuthVersion = "16.0.1"
}
repositories {
google()
mavenCentral()
mavenCentral()
}
dependencies {
classpath 'com.facebook.react:react-native:0.12.+'
classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenCentral()
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
maven {
// expo-camera bundles a custom com.google.android:cameraview
url "$rootDir/../node_modules/expo-camera/android/maven"
}
maven { url 'https://maven.google.com' }
maven { url 'https://www.jitpack.io' }
google()
jcenter()
}
}
除了添加“www”之外,我找不到任何有关为什么会发生这种情况的信息。到“https://www.jitpack.io”,但它已经有了。
“react-native run-android”昨天可以工作,从那时起我改变了模拟器,也改变了java版本。
有谁知道为什么会这样?
JCenter 将关闭,现在为只读。而且它离线通常会导致构建和管道出现问题。
您需要更新您的
android/build.gradle
文件才能使用 mavenCentral()
而不是 Jcenter()
。
根据 Gradle 文档,JCenter 是 Maven Central 的镜像,因此所有依赖项都应该在那里。
JCenter 是一个中央工件存储库,就像 Maven Central 一样。软件 项目使用 JCenter 将其软件分发给其他人。 JCenter 还充当 Maven Central 的镜像,因此任何依赖项 在 Maven Central 上可用 在 JCenter 上也可用(但不是副 反之亦然)。
如果它是一个库(例如node_modules/react-native-appsflyer),指向Jcenter,那就会给你一个错误......我建议你检查给你一个错误的库是否已更新一个新的有修复的版本。如果是这样,请更新到新的 版本以获取更改。
如果库没有包含修复程序的版本,如果您使用 npm 包在 React-native 中构建,则可以利用
patch-package
library。因为图书馆可能尚未发布从 build.gradle
中删除 JCenter 的更新。
您可以使用补丁包库自行应用更改。最后添加了文档供参考。
node_modules/library-with-error/android/build.gradle
jcenter()
更改为 mavenCentral()
npx patch-package library-with-error
JCenter
,而不是将 MavenCentral() 添加到顶部,因为 shutdown 并且 JCenter 经常离线并给出超时错误。根据当前时间线,使用 JCenter 的构建将能够 在2022 年 2 月 1 日之前解决依赖关系,无需进行任何更改。后 在那一天,无法保证您能够建造 如果您继续使用 JCenter,请保留您的软件。”
“为了阻止新项目使用 JCenter,我们将删除 来自我们的示例和初始化模板的 JCenter。新的默认值将是 马文中央。 Gradle 本身与 JCenter 或 Maven 没有内在联系 Central,因此您可以随时切换您选择的任何其他存储库。 此更改将在下一个 Gradle 版本中生效 – Gradle 7.0。”
npm install [email protected]
并修补
android/build.gradle
:
- maven {
- // Android JSC is installed from npm
- url("$rootDir/../node_modules/jsc-android/dist")
+ exclusiveContent {
+ filter {
+ includeGroup "org.webkit"
+ }
+ forRepository {
+ maven {
+ url("$rootDir/../node_modules/jsc-android/dist")
+ }
+ }