“dependencies”无法应用于“(groovy.lang.Closure)”

130

我无法修复这个错误:

dependencies cannot be applied to '(groovy.lang.Closure)

这是我的Gradle文件:

buildscript {
     repositories {
         maven { url 'http://download.crashlytics.com/maven' }
     }

     dependencies {
         classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
     }
 }
apply plugin: 'android'
apply plugin: 'crashlytics'

repositories {
   maven { url 'http://download.crashlytics.com/maven' }
}

dependencies {
    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':FRNDzTER_core')
    compile project(':cropper')
    compile project(':stickyListHeaders')
    compile "com.nostra13.universalimageloader:universal-image-loader:${rootProject.universalImageLoaderVersion}"
    compile "com.google.android.gms:play-    services:${rootProject.googlePlayServicesVersion}"
    compile "de.keyboardsurfer.android.widget:crouton:${rootProject.croutonVersion}"
    compile "com.nineoldandroids:library:${rootProject.nineoldandroidsVersion}"
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+'
    compile 'com.crashlytics.android:crashlytics:1.+'
}

android{
    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    } 
    buildTypes {
        release {
            debuggable rootProject.prodDebug
            proguardFile 'proguard.cfg'
        }
    }

    dependencies {
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        abortOnError false
    }
 }

1
我非常确定这些是相关的,正如我在那里的答案所示,我认为错误标记是一个bug,因此解决方案存在差异。https://dev59.com/hl4b5IYBdhLWcg3wchNL#30823995这并不意味着这里的最佳答案没有提出一些关于您“当前”Gradle构建脚本的非常有效的一般观点。 - Seb Andraos
请看这个链接:https://dev59.com/hl4b5IYBdhLWcg3wchNL - myNameCoad
16个回答

249

您可以前往“首选项”并选择“使用默认的Gradle包装器”,然后重新构建项目。 对我而言效果很好: 在这里输入图片描述


5
有人能解释一下为什么会发生这种情况吗? - racs
1
似乎在从1.4更新到1.5之后,此设置被“重置”为在我的机器上使用本地分发。这个答案绝对解决了问题。 - seeming.amusing
3
截至143.2532994版本,这个问题似乎又出现了……有没有和我一样的人?太烦人了。 - Arst
哦,是的,有一个原因 - Mac 用户。在 Windows 上,页面是不同的。“没有可显示的内容”。标记的答案至少在某种程度上是有用的。 - Gangnus
成功了!但是我也不得不重新启动Android Studio。 - Eric
显示剩余3条评论

37

前往

Windows

文件 -> 设置 -> 构建、执行、部署 -> 构建工具 -> Gradle

Mac

偏好设置 -> 构建、执行、部署 -> 构建工具 -> Gradle

并选择使用默认的gradle包装器


1
Windows。无可选择。 - Gangnus
2
首先你必须先打开项目。 - Raptor
在Linux上,与Windows相同:文件->设置->构建、执行、部署->构建工具->Gradle。您可以编辑您的答案并写“Windows / Linux”。 - lenooh

22
根据Android Studio生成的内容,您需要拥有一个顶层项目文件build.gradle,以及另一个用于您的应用程序的build.gradle

顶层:


顶层:
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        maven { url 'http://download.crashlytics.com/maven' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
        classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url 'http://download.crashlytics.com/maven' }
    }
}

应用层:

apply plugin: 'com.android.application'
apply plugin: 'crashlytics'

android{
    compileSdkVersion rootProject.compileSdkVersion
    buildToolsVersion rootProject.buildToolsVersion
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode rootProject.versionCode
        versionName rootProject.versionName
    } 
    buildTypes {
        release {
            debuggable rootProject.prodDebug
            proguardFile 'proguard.cfg'
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        abortOnError false
    }
 }     `

dependencies {
    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':FRNDzTER_core')
    compile project(':cropper')
    compile project(':stickyListHeaders')
    compile "com.nostra13.universalimageloader:universal-image-          l                        loader:${rootProject.universalImageLoaderVersion}"
    compile "com.google.android.gms:play-    services:${rootProject.googlePlayServicesVersion}"
    compile "   "de.keyboardsurfer.android.widget:crouton:${rootProject.croutonVersion}"
    compile "com.nineoldandroids:library:${rootProject.nineoldandroidsVersion}"
    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+'
    compile 'com.crashlytics.android:crashlytics:1.+'
}

但即使没有以上所有的问题,你的问题在于你在android插件配置中有一些dependencies

android {
    dependencies {
    }
}

删除那个空的dependencies块。

编辑:我也开始在最新的Android Studio中遇到这个错误,我所需要做的就是添加一个更新版本的Gradle插件和compileSdkVersion 22。

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}

12
我做了那个,但问题仍然存在:( - Ashwani Kottapalli
说实话,我认为你应该修复Crouton、Universal-Image-Loader和googleplayServices依赖中的额外引号和空格。此外,根据http://developer.android.com/google/play-services/setup.html,你也应该只使用Google Play服务的部分内容。 - EpicPandaForce
它不起作用了...你能给我FB ID或其他联系方式吗?这样我们可以解决问题吗?拜托了? - Ashwani Kottapalli
在这种情况下,我不知道你的错误是什么。:( 上一次发生这种情况时,我的Android和Gradle插件已过时,并且我正在使用不再存在的配置类型。 - EpicPandaForce
1
取决于您是使用命令行还是集成开发环境(IDE)。如果使用IDE,则要看使用哪个IDE。 - EpicPandaForce

20

如果您已经在使用“默认的 Gradle 包装器”,但它没有帮助:

In Menu click: File -> Invalidate Caches / Restart...

如果这也没有帮助,请尝试以下两步:

1) Delete ".gradle" folder (and "build" folder if you have it already)

2) In Menu click: File -> Invalidate Caches / Restart...

重新启动后,警告应该消失。

(对我来说,它适用于Android Studio和IntelliJ Idea)


对我来说起作用了。唯一需要注意的是:如果你使用自己的 Gradle 而不是捆绑的 Gradle,你也必须删除你主目录下的 .gradle 文件夹。 - user2936450
2
只执行第二条指令就可以了,谢谢! - manolodewiner
3
工作了5秒钟,然后我再次遇到了那个错误。 - Yar
最近IntelliJ在正确解析项目方面变得非常糟糕,这有点令人沮丧。这曾经是它的强项...现在感觉它在最微小的事情上都会跌倒。 - smaudet

18

我的问题是整个build.setting文件都被“不能应用于‘(groovy.lang.Closure)’”的警告信息占据了,而不是发生在任何特定变量上。

我尝试了其他人提供的所有解决方案,但它们都对我无效。最终我采取了以下步骤,然后它就像魔法一样奏效了。如果你遇到了同样的问题,请试一试:

  1. 打开并编辑文件:yourproject/gradle/wrapper/gradle-wrapper.properties。按照下面的图片所示更新gradle分发版本的内容,然后保存。
  2. 删除此文件夹:yourproject/.gradle
  3. 点击“与gradle文件同步项目”,然后你就可以开始使用了。

enter image description here


1
不需要删除yourproject/.gradle目录。如果您选择这样做,请确保保存您在其中进行的任何自定义,例如添加一个带有org.gradle.daemon=true(常见优化)的gradle.properties文件。但是,您可以简单地重新构建,gradle包装器将下载distributionUrl中指定的新版本以及旧版本。旧版本目录保留在项目的gradle目录中也是可以的。 - Mark McClelland
gradle-wrapper.properties中更新gradle版本解决了我的问题。谢谢! - BVB

4

当我试图更改偏好设置时,注意到了一个警告提示我的gradle home目录不正确。于是我打开了文件浏览器,选择了更新的gradle版本,所有错误都消失了。如下图所示。

enter image description here


1
我敢打赌,问题与给你警告的代码片段完全无关,很可能是你的proguard文件。我在我的代码中有以下内容,并收到了相同的警告:
buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

通过注释掉 runProguard false,所有的问题都消失了,真是讽刺 :)

Daniel Wilson,如果你将runProguard改为minifyEnabled,会有帮助吗?更多信息请参见此处 - Sergii N.

1

我在Android Studio 2.2中遇到了同样的问题,以下方法对我有效:

原文:

android {
...
}

dependencies {
...
}

dependencies 移动到 android 中:

android {
...
   dependencies {
   ...
   }
}

1
我在Kotlin项目的IntelliJ中遇到了类似的问题。看起来问题在于即使我的项目设置使用JDK 8,语言和API版本也以某种方式设置为1.3。请参见项目首选项> Facets。在我的情况下,我勾选了“使用项目设置”,但手动按facet设置它们也可能有效。

1
我在Android Studio中通过无效化缓存并重新启动解决了这个问题。 < p > < code > 文件 - > 无效化缓存 / 重新启动... < /code > < /p >

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接