我正在使用与Android Studio捆绑在一起的Gradle构建系统。到目前为止,我能够使用存储在我的项目结构中的依赖项构建多项目设置。我现在想使用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.
到目前为止我尝试过的任何工件都会发生这种情况。知道什么是错的吗?
由于
答案 0 :(得分:70)
buildscript部分中的“存储库”块仅适用于构建环境。您还需要指定在构建项目时解析依赖项时要使用的存储库,因此需要在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
}
}
请注意“存储库”的两个实例。您可以在the gradle docs中详细了解这实际意味着什么。
答案 1 :(得分:12)
似乎当前的Android Studio版本没有立即获取新的依赖项。尝试重新启动IDE。
编辑:
Android Studio> = 0.1.4v不需要这样做。它已经建立了行动Sync Project with Gradle file
。您可以在Tools > Android > Sync Project with Gradle file
下找到它,也可以只在工具栏中找到它。
答案 2 :(得分:7)
http://tools.android.com/tech-docs/new-build-system/user-guide
注意:这仅影响运行构建的代码,而不影响项目。项目本身需要声明自己的存储库和依赖项。这将在稍后介绍。
所以你必须申报
repositories {
mavenCentral()
}
再次在您的项目范围内。
答案 3 :(得分:3)
我是这样做的:
在Top build.gradle(Project: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()存储库一起添加。
然后对于我的app / build.gradle文件,我添加了我需要的任何库或依赖项:
dependencies {
....//Add dependency here
}
答案 4 :(得分:3)
我最近不得不在gradle中使用maven依赖,也许这个小例子对某人有用。
在maven:
<dependency>
<groupId>com.turo</groupId>
<artifactId>pushy</artifactId>
<version>0.12.1</version>
</dependency>
成绩变为:
repositories {
mavenCentral()
}
dependencies {
compile 'com.turo:pushy:0.12.1'
}
答案 5 :(得分:-1)
<强>行家强> Maven继续使用XML作为编写构建规范的格式。然而,结构截然不同。 Maven有自己的问题。依赖关系管理不能处理同一个库的不同版本之间的冲突(常春藤更好)。 XML作为构建配置格式是严格结构化和高度标准化的。定制目标(目标)很难。由于Maven主要关注依赖管理,因此复杂的自定义构建脚本在Maven中写入比在class1中更难编写。