48

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

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

谢谢

4

6 回答 6

70

buildscript 部分中的“repositories”块仅适用于构建环境。在解析构建项目的依赖项时,您还需要指定要使用的存储库,因此您需要在 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 docs中阅读更多关于这实际上意味着什么的信息。

于 2013-05-21T16:44:48.433 回答
12

似乎当前的 Android Studio 版本不会立即获取新的依赖项。尝试重新启动 IDE。

编辑:Android Studio >= 0.1.4v 不需要。它已经建立在行动中Sync Project with Gradle file。您可以Tools > Android > Sync Project with Gradle file在工具栏下或仅按钮下找到它。

于 2013-05-21T13:47:43.843 回答
7

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

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

所以你必须声明

  repositories {
     mavenCentral()
  }

再次在您的项目范围内。

于 2013-06-20T04:28:07.650 回答
4

我是这样做的:

在 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
}
于 2015-07-09T06:50:24.813 回答
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'
}
于 2018-04-02T17:23:39.147 回答
-1

maven Maven 继续使用 XML 作为格式来编写构建规范。但是,结构完全不同。Maven有它自己的问题。依赖管理不能很好地处理同一库的不同版本之间的冲突(Ivy 更擅长于此)。XML 作为构建配置格式具有严格的结构和高度标准化。目标(目标)的定制是困难的。由于 Maven 主要关注依赖管理,因此在 Maven 中编写复杂的自定义构建脚本实际上比在 Gradel 中更难。

于 2015-10-19T04:03:59.360 回答