IntelliJ IDEA和Gradle - 不能应用于'(groovy.lang.Closure)'

Seb*_*rot 62 java groovy intellij-idea gradle build.gradle

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

java.lang.String错误

java.lang.String错误

要么

groovy.lang.Closure错误

groovy.lang.Closure错误

我已经尝试清除文件的内容,只写了顶行:

group 'com.me.blah'
Run Code Online (Sandbox Code Playgroud)

但即便如此也会导致错误.

出于上下文的考虑,这是一个更大的SpringBoot项目中的单个模块.该模块是一组简单的静态文件(使用Gradle进行CSS编译,静态分析等),其余的是Java模块,并且没有 Gradle问题.

任何人都可以想到为什么IntelliJ会努力理解这个Gradle文件?

Jon*_*ols 39

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

  • 为了清楚起见,“直接从Gradle文件中重新打开项目”的意思是:[打开]>选择`build.gradle`> [作为项目打开] (3认同)
  • 这有助于修复上述错误,但它删除了我的所有配置,因此未存储项目结构和模块。相反,我发现这有效:/sf/answers/3468078631/ (2认同)

小智 21

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

group = 'com.me.blah'
Run Code Online (Sandbox Code Playgroud)

  • 这导致我无法将“字符串”分配给“对象”。 (3认同)
  • 对于那些可能会问这个问题的人,“那么为什么'com.me.blah'组为什么起作用?”,请看一下Groovy的[`methodMissing`钩子](http://groovy-lang.org/metaprogramming。 html#_methodmissing)。默认的Gradle`Project`实现显然使用此钩子将属性设置为缺少的方法的名称(如果存在)。 (2认同)

FGr*_*reg 15

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

解决方法:
可以添加注释
//noinspection GroovyAssignabilityCheck
以抑制警告,但这不是必需的,因为这些是Gradle每天使用的标准.

此问题最近已更新,已标记为已修复,已准备好在2016.2版本发布时发布.

  • 我使用的是 2020.2 RC 版本,这种情况仍在发生 (2认同)

Ban*_*tin 7

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


Raj*_*ami 6

最近在windows上发生在我身上。我尝试了以上所有方法,但没有成功。

我做了什么:

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

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

也许它会对某人有所帮助。谢谢。


小智 6

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

  • 无需禁用整个 Groovy 部分,只需禁用“不兼容的类型分配”即可。要禁用此检查:文件 -> 设置... -> 编辑器 -> 检查 -> Groovy -> 分配问题 -> 禁用不兼容的类型分配 (2认同)

Ari*_*rra 6

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

希望这可以帮助!


Seb*_*rot 5

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

type="WEB_MODULE"
Run Code Online (Sandbox Code Playgroud)

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

type="JAVA_MODULE"
Run Code Online (Sandbox Code Playgroud)

所以答案似乎就是这样.将模块从"web"更改为"java".

  • 不幸的是,这对我来说并不成功.什么工作是"禁用检查".不确定这是否是最佳方式. (3认同)
  • 我没有 iml 文件。 (3认同)