我正在尝试通过Maven将私有依赖项添加到我的项目(react-native-android)中。不幸的是,当我尝试构建./gradlew assembleDebug
项目时,出现以下错误消息。
返回以下错误消息:
> FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
> Could not resolve all task dependencies for configuration ':app:debugCompileClasspath'.
> Could not resolve com.facebook.react:react-native:0.19.+.
Required by:
project :app > project :react-native-i18n
> Failed to list versions for com.facebook.react:react-native.
> Unable to load Maven meta-data from https://xxxPRIVATE_REPOxxx/android/com/facebook/react/react-native/maven-metadata.xml.
> Could not get resource 'https://xxxPRIVATE_REPOxxx/android/com/facebook/react/react-native/maven-metadata.xml'.
> Could not GET 'https://xxxPRIVATE_REPOxxx/android/com/facebook/react/react-native/maven-metadata.xml'. Received status code 403 from server: Forbidden
代码示例
repositories {
mavenCentral()
maven {
url 'https://maven.google.com/'
name 'Google'
}
maven { url "https://xxxPRIVATE_REPOxxx/android" }
}
dependencies {
implementation project(':react-native-i18n')
implementation 'com.android.support:support-v4:+'
implementation 'xxxPRIVATE_DEPENDENCYxxx:1.0.+'
}
我已经阅读了许多有关Maven和Gradle主题的文章和研究。这是我对问题的发现:
声明的顺序决定了Gradle在运行时如何检查依赖关系。如果Gradle在特定存储库中找到模块描述符,它将尝试从同一存储库下载该模块的所有工件。您可以了解有关依赖项下载的内部工作的更多信息。
因此,我在这里做了一个假设...在下载项目依赖项时,Maven遍历了两个Maven存储库(Maven Google和xxxPRIVATE_REPOxxx)以获取合适的库。但是,当到达xxxPRIVATE_REPOxxx时,它无法找到maven-metadata.xml,因此结果为 https://xxxPRIVATE_REPOxxx/android/com/facebook/react/react-native/maven-metadata.xml 和403 Forbidden。
我的问题:
是否应该有一种方法表明从哪个Maven获取哪个依赖项?
我在想像这样的事情
implementation 'xxxPRIVATE_DEPENDENCYxxx:1.0.+' : xxxPRIVATE_REPOxxx
(您知道我的意思)
我已经尝试过:
答案 0 :(得分:0)
发现问题是因为第三方库(react-native-i18n)使用的react native依赖关系太低。 您可以在react-native-i18n的build.gradle中找到它。
dependencies {
compile 'com.facebook.react:react-native:0.12.+'
}
因此,我的解决方法是将代码更新为
compile 'com.facebook.react:react-native:+'