Maven与Android Studio / Gradle的依赖关系

我正在使用与Android Studio捆绑在一起的Gradle构build系统。 到目前为止,我能够使用存储在我的项目结构中的依赖项来构build多项目设置。 现在我想使用maven依赖,无济于事。 我写了一个非常简单的build.gradle文件,总是失败:

buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android' dependencies { compile 'com.google.android:support-v4:r7' } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 targetSdkVersion 16 } } 

与以下消息:

  * What went wrong: A problem occurred configuring project ':absabs'. > Failed to notify project evaluation listener. > Could not resolve all dependencies for configuration ':absabs:compile'. > Could not find com.google.android:support-v4:r7. Required by: absabs:absabs:unspecified .... Caused by: org.gradle.api.internal.artifacts.ivyservice.ModuleVersionNotFoundException: Could not find com.google.android:support-v4:r7. 

它到目前为止我所尝试过的任何工件。 有什么错误的想法吗?

谢谢

buildscript部分中的“repositories”块只适用于构build环境。 您还需要指定在构build项目时解决依赖关系时使用哪个存储库,因此需要在build.gradle文件中添加类似以下内容:

 repositories { mavenCentral() } 

你的完整文件看起来像这样:

 buildscript { repositories { maven { url 'http://repo1.maven.org/maven2' } } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android' repositories { mavenCentral() } dependencies { compile 'com.google.android:support-v4:r7' } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 targetSdkVersion 16 } } 

请注意“存储库”的两个实例。 您可以阅读更多关于这实际上在gradle文档意味着什么。

似乎目前的Android Studio版本不会立即提取新的依赖关系。 尝试重新启动IDE。

编辑:这是不需要的Android Studio> = 0.1.4v。 它Sync Project with Gradle file构buildSync Project with Gradle file 。 你可以在Tools > Android > Sync Project with Gradle file或只是在工具栏中find它。

http://tools.android.com/tech-docs/new-build-system/user-guide

注意:这只影响运行构build的代码,而不影响项目。 项目本身需要声明自己的存储库和依赖项。 这将在稍后介绍。

所以你必须申报

  repositories { mavenCentral() } 

再次在您的项目范围内。

我这样做了:

在顶部build.gradle(项目:YourProject)我补充说:

  buildscript { repositories { mavenCentral() } dependencies { classpath 'com.h2database:h2:1.4.187' //NOTE: you can get the latest version in http://mvnrepository.com/artifact/com.h2database/h2 } } allprojects { repositories { jcenter() mavenCentral() } } 

注:我添加了这个预定义的jcenter()存储库。

然后为我的应用程序/ build.gradle文件,我添加了我需要的任何库或依赖项:

 dependencies { ....//Add dependency here } 

Maven Maven继续使用XML作为编写构build规范的格式。 但是,结构是截然不同的。 Maven有自己的问题。 依赖关系pipe理不能很好地处理同一个库的不同版本之间的冲突(常春藤更好)。 XML作为构buildconfiguration格式是严格结构化和高度标准化的。 目标定制(目标)很难。 由于Maven主要关注依赖关系pipe理,因此复杂的自定义构build脚本实际上比Maven更难在Maven编写。