【问题标题】:Maven Dependencies with Android Studio / GradleMaven 依赖与 Android Studio / Gradle
【发布时间】:2013-05-21 13:27:42
【问题描述】:

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

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

谢谢

【问题讨论】:

标签: android gradle android-studio


【解决方案1】:

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
    }
}

注意“存储库”的两个实例。您可以在 the gradle docs 中了解更多关于这实际上意味着什么。

【讨论】:

  • 你能解释一下吗,因为我不确定你的意思?
  • 伙计们,我有类似的问题。这里的关键部分是双重存储库声明,一个在 buildscript 内部,另一个在它外部。
  • @peter-niederwieser 你介意看看this question吗?
  • 我是 gradle 新手,真的很烦在哪里放置什么关键字,在他们的文档中找不到它...是否有任何示例构建脚本包含正确结构中的所有关键字?谢谢
  • 例如,AndroidManifest 的文档很好地列出了所有可用的关键字和可能的值,即使是初学者也很容易搜索:developer.android.com/guide/topics/manifest/manifest-intro.html
【解决方案2】:

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

编辑: Android Studio >= 0.1.4v 不需要这个。它已经在运行Sync Project with Gradle file。您可以在Tools > Android > Sync Project with Gradle file 下找到它,或者直接在工具栏中找到它。

【讨论】:

  • +1 获取此信息。重新启动 IDE 后,我能够导入依赖项中引用的类。
  • 这让我困惑了很久,因为我的项目中的build.gradle 很好。重新启动IDE对其进行了排序。谢谢
【解决方案3】:

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

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

所以你必须声明

  repositories {
     mavenCentral()
  }

再次进入您的项目范围。

【讨论】:

    【解决方案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
    }
    

    【讨论】:

      【解决方案5】:

      我最近不得不在 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'
      }
      

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2021-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-09
          • 2015-03-24
          • 2014-01-26
          • 2013-05-13
          • 2015-01-25
          相关资源
          最近更新 更多