Android Studio / Gradle的Maven依赖项

时间:2013-05-21 13:27:43

标签: android gradle android-studio

我正在使用与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.

到目前为止我尝试过的任何工件都会发生这种情况。知道什么是错的吗?

由于

6 个答案:

答案 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中更难编写。