2013-05-21 33 views
44

我使用的是捆绑在Android Studio中的Gradle构建系统。到目前为止,我能够使用存储在我的项目结构中的依赖项来构建多项目设置。我现在想使用maven依赖项,但无济于事。我写了一个非常简单的build.gradle的文件,总是失败:Maven依赖Android Studio/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

http://mvnrepository.com/artifact/com.google.android/support-v4/r7 –

+0

注意:您可以在http://mvnrepository.com/artifact/com.h2database/h2中获得最新版本 – mangu23

回答

68

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中阅读更多关于这个实际意义的信息。

+0

你能说明一下吗,因为我不确定你的意思? – arinte

+0

@arinte更清楚了吗? – ZoFreX

+0

@ZoFreX是的,它做到了。 – arinte

12

看来,目前的Android Studio版本并没有立即拿起新的依赖。尝试重新启动IDE。

编辑: 这对于Android Studio> = 0.1.4v不是必需的。它建立在行动Sync Project with Gradle file。您可以在Tools > Android > Sync Project with Gradle file下找到它,也可以在工具栏中找到它。

+0

此信息+1。重新启动IDE后,我可以导入依赖关系中引用的类。 –

+0

这让我很困惑,因为我的项目中'build.gradle'很好。重新启动IDE将其排序。谢谢 – samael

3

我就是这么做的:

在顶部的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 
} 
0

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