【问题标题】:IntelliJ IDEA and Gradle - Cannot be applied to '(groovy.lang.Closure)'IntelliJ IDEA 和 Gradle - 不能应用于“(groovy.lang.Closure)”
【发布时间】:2015-12-30 13:14:45
【问题描述】:

我有一个 Gradle 文件,每当我在 IntelliJ IDEA 14.1.5 中加载打开它时,都会显示整个文件的 IDE 错误。即所有错误似乎都是:

java.lang.String 错误

groovy.lang.Closure 错误

我试过清除文件的内容,只写第一行:

group 'com.me.blah'

但即使这样也会导致错误。

为了上下文 - 这是一个更大的 SpringBoot 项目中的一个单独的模块。该模块是一组简单的静态文件(使用 Gradle 进行 CSS 编译、静态分析等),其余的是 Java 模块,没有有 Gradle 问题。

谁能想到为什么 IntelliJ 难以理解这个 Gradle 文件?

【问题讨论】:

    标签: java intellij-idea groovy gradle build.gradle


    【解决方案1】:

    我经常注意到这一点。在创建新项目并使用“Gradle”模板时,IntelliJ 似乎完全错了。所以我采取的做法是在创建一个新项目后,删除 .idea 和 .iml 文件,然后直接从 Gradle 文件重新打开项目。 IntelliJ 似乎更好地理解了这种情况下发生了什么。

    【讨论】:

    • 这可以解决上述错误,但它删除了我的所有配置,因此项目结构和模块没有存储。相反,我发现这行得通:stackoverflow.com/a/49543980/7267809
    • 为了清楚起见,“直接从Gradle文件重新打开项目”的意思是:[打开] > 选择build.gradle > [打开为项目]
    【解决方案2】:

    对于问题的第一部分:group 是一个属性,所以必须有一个赋值,而不是一个函数调用。正确的代码是:

    group = 'com.me.blah'
    

    【讨论】:

    • 对于那些可能会问这个问题的人,“那为什么group 'com.me.blah' 有效?”看看Groovy 的methodMissing hook。默认的 Gradle Project 实现显然使用这个钩子来设置带有缺失方法名称的属性,如果它存在的话。
    • 这对我来说是Cannot assign 'String' to 'Object'
    【解决方案3】:

    我在 IDEA 错误跟踪器 (IDEA-142683) 中找到了这个建议:

    解决方法:
    可以添加评论,例如
    //noinspection GroovyAssignabilityCheck
    抑制警告,但这不是必需的,因为这些是 Gradle 每天的标准用法。

    此问题最近已更新并被标记为已修复,准备与 2016.2 版本一起发布。

    【讨论】:

    • 我需要在哪里添加该评论?我在 15.0.6,这很烦人
    • @stewenson 把它放在抱怨的代码块的正上方。
    • 2019.1.2 版本再次发生在我身上
    • 我使用的是 2020.2 RC 版本,并且还在发生这种情况
    【解决方案4】:

    试用文件 |使缓存无效并重新启动。在我将文件中其他地方的语法弄乱后,它对我有用。

    【讨论】:

      【解决方案5】:

      对于任何寻求类似修复的人来说,这归结为模块的类型。我的模块在我的 .iml 文件中定义为

      type="WEB_MODULE"
      

      我创建了一个新的 Gradle 模块并粘贴了相同的内容,删除了原始模块,将新模块重命名为与旧模块相同的名称,一切正常。当我对结果进行比较时,唯一的变化是 .iml 文件现在说:

      type="JAVA_MODULE"
      

      看来,答案就在眼前。将您的模块从“web”更改为“java”。

      【讨论】:

      • 不幸的是,这对我没有用。起作用的是“禁用检查”。不确定这是否是最好的方法。
      • 我没有 iml 文件。
      • @Displee 它可能在您的.idea 目录中
      【解决方案6】:

      我发现这个警告来自对 Intelliji 的 Groovy 检查。因此,如果您的项目不是纯 groovy,您可以通过转到文件 -> 设置 -> 编辑器 -> 检查 -> 禁用 Groovy 来禁用此检查。同样,只是一种解决方法。

      【讨论】:

      • 无需禁用整个 Groovy 部分,只需禁用“不兼容的类型分配”。要禁用此检查:文件 -> 设置... -> 编辑器 -> 检查 -> Groovy -> 分配问题 -> 禁用不兼容的类型分配
      【解决方案7】:

      对我来说,在尝试了所有这些答案但没有结果之后,更改项目的 Java SDK 就成功了,我在 1.8 上并将其更改为最新的,但仍然是 8 的项目级语言。

      希望这会有所帮助!

      【讨论】:

      • 我在 buildSrc 目录中遇到了这个问题。当我将语言级别从 14 更改为 8 时,警告消失了。我不知道为什么 java 语言级别会干扰具有 Groovy DSL 语法的 Gradle 脚本。
      【解决方案8】:

      最近在 Windows 上发生在我身上。以上方法我都试过了,还是不行。

      我做了什么:

      1 - 我已经设置了 JAVA_HOME 环境变量。所以 IDEA 选择它作为项目 SDK,这些警告出现了。

      2 - 所以,我从项目 SDK 中删除了默认的 JAVA_HOME 并手动添加了 jdk 路径。重新启动,所有警告都消失了。

      也许它会帮助某人。谢谢。

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 2015-05-21
        • 2016-09-21
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        相关资源
        最近更新 更多