当我尝试将Gson添加到现有的Android gradle项目时,我遇到了一个问题。
例外是这样的
“未能解决:com.google.code.gson:gson:2.3.1”
我的build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}
apply plugin: 'android'
dependencies {
compile 'com.google.code.gson:gson:2.3.1'
.
.
经过一些搜索和反复试验后,我发现您需要添加以下内容来解决问题:
allprojects {
repositories {
jcenter()
}
}
为什么我们需要两次引用jcenter,为什么“allprojects”对解决这个问题很重要?
答案 0 :(得分:4)
经过一些搜索和跟踪和错误后,我发现您需要添加以下内容来解决问题
仅当您拥有传统的Android Studio项目时,才能将应用程序划分为模块(例如app/
)。真正需要的是模块知道从哪里获取依赖关系。
为什么我们需要两次引用jcenter
repositories
闭包中的buildscript
闭包说“这些是从中提取Gradle插件的工件存储库以及为dependencies
闭包本身列出的其他buildscript
”。
repositories
关闭中的allprojects
闭包说“这些是从中提取自己的应用程序的工件存储库dependencies
”。
在传统的Android Studio项目中,allprojects
闭包位于项目根目录中的build.gradle
文件中。 allprojects
说“此闭包中的所有内容,请应用于此项目中所有模块的Gradle配置,例如那里的app/
模块”。
现在,您的问题中的build.gradle
代码段暗示您可能不拥有传统的Android Studio项目,而是有一个您没有app/
的项目模块,您只有一个build.gradle
文件。在这种情况下,allprojects
本身不是必需的(因为没有模块),但您仍需要指定repositories
是什么。
例如,以下是来自a module-less project的build.gradle
文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}
apply plugin: 'com.android.application'
repositories {
mavenCentral()
maven {
url "https://repo.commonsware.com.s3.amazonaws.com"
}
}
dependencies {
compile 'de.greenrobot:eventbus:2.4.0'
compile 'com.android.support:support-v13:21.0.3'
compile 'com.commonsware.cwac:wakeful:1.0.+'
}
android {
compileSdkVersion 19
buildToolsVersion "21.1.2"
defaultConfig {
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
这里,除了repositories
内的buildscript
闭包(用于定义插件的来源),我还有一个顶级repositories
闭包,用于定义顶部位置 - 等级dependencies
来自。
答案 1 :(得分:0)
它们只是存储库的不同存储库。 GSON显然在JCentral中,其他人正在使用Maven Ventral。
从阅读JCenter开始,它就是Bintray背后的存储库,来自JFrog公司(我之前遇到过,我想这就是'J'来自的地方)。根据Bintray的博客,Bintray是Maven Central的超集。