IntelliJ IDEA和Gradle - 无法应用于'(groovy.lang.Closure)'

100

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

java.lang.String 错误

java.lang.String errors

或者

groovy.lang.Closure 错误

groovy.lang.Closure errors

我尝试清除文件内容,只编写顶部一行:

group 'com.me.blah'

但即使如此,结果仍然是出现错误。

为了更好地理解背景 - 这是一个较大的SpringBoot项目中的单独模块。该模块是一组简单的静态文件(使用Gradle进行CSS编译、静态分析等),而其余的则是Java模块,并且没有遇到Gradle问题。

有人能想到为什么IntelliJ会难以理解这个Gradle文件吗?

8个回答

59

我经常注意到这个问题。在创建新项目并使用“Gradle”模板时,IntelliJ似乎总是搞错了。所以我想到的解决方法是,在创建新项目后,删除.idea和.iml文件,并直接从Gradle文件中重新打开项目。IntelliJ似乎在这种情况下更好地理解了发生了什么。


2
这个方法确实解决了上述错误,但是它会删除所有的配置信息,导致项目结构和模块丢失。相反,我发现这个方法可行:https://dev59.com/vlwY5IYBdhLWcg3wLFSw#49543980。 - Aanand Kainth
18
为了更清楚明白,“re-open the project directly from the Gradle file”的意思是:[打开] > 选择build.gradle文件 > [作为项目打开]。 - noobar

33

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

group 是一个属性,因此必须进行赋值操作,而不是函数调用。正确的代码如下:

group = 'com.me.blah'

7
如果有人问:“那为什么 group 'com.me.blah' 能够工作?”请看一下 Groovy 的 methodMissing hook。默认的 Gradle Project 实现显然使用这个钩子来设置具有缺失方法名称的属性,如果存在的话。 - Rusty Shackleford
4
对我来说,这会导致“无法将'String'赋值给'Object'”。 - PHPirate

19
我在 IDEA 错误追踪器(IDEA-142683)中发现了这个建议:
解决方法:
可以添加注释,例如
//noinspection GroovyAssignabilityCheck
来抑制警告,但这不应该是必要的,因为这是标准的 Gradle 使用方法。
这个问题最近已经更新,标记为已修复,在 2016.2 版本中发布。

应该会在下一个 EAP 版本中修复:https://youtrack.jetbrains.com/issue/IDEA-142683#comment=27-1448045 - MartyIX
1
我需要在哪里添加那个注释?我使用的是15.0.6版本,这很烦人。 - stewenson
@stewenson 将其放置在抱怨的代码块正上方即可。 - FGreg
1
这个问题在我的2019.1.2版本中又出现了。 - Andres Farias
4
我目前使用的是2020.2 RC版本,这个问题仍然存在。 - Dhruv garg

19

尝试选择“文件” | “无效缓存并重启”。在文件的其他位置弄错语法后,我用此方法解决了问题。


8

如果有人正在寻找类似的解决方法,那么问题在于模块的类型。我的模块在.iml文件中被定义为

type="WEB_MODULE"

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

type="JAVA_MODULE"

所以,看起来这就是答案。将您的模块从“web”更改为“java”。

3
很遗憾,这对我没有起作用。有效的方法是“禁用检查”。不确定这是否是最佳方案。 - Kees de Kooter
4
我没有IML文件。 - Displee
@Displee 可能在你的 .idea 目录中。 - Jonathan E. Landrum

7

对于我而言,尝试了所有答案都没有结果后,更改项目的Java SDK解决了问题,我之前使用的是1.8版本,更改为最新版本,但项目所使用的语言级别仍为8。

希望这可以帮助到您!


我在buildSrc目录中遇到了这个问题。当我将语言级别从14降至8时,警告消失了。我不知道为什么Java语言级别会干扰使用Groovy DSL语法的Gradle脚本。 - RenatoIvancic

6
我发现这个警告是由Intelliji的Groovy检查引起的。因此,如果您的项目不是纯groovy,您可以通过转到文件->设置->编辑器->检查->禁用Groovy来禁用此检查。再次强调,这只是一个解决方法。

2
不需要禁用整个Groovy部分,只需禁用“不兼容类型赋值”。 要禁用此检查: 文件->设置...->编辑器->检查->Groovy->赋值问题->禁用不兼容的类型赋值。 - plamenti

5

最近我在Windows上遇到了这个问题。我尝试了以上所有方法,但都没有解决。

我的做法:

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

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

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


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