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


68

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

java.lang.String错误

java.lang.String错误

要么

groovy.lang。关闭错误

groovy.lang。关闭错误

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

group 'com.me.blah'

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

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

谁能想到IntelliJ为什么要努力理解此Gradle文件吗?

Answers:


41

我经常注意到这一点。当创建一个新项目并使用“ Gradle”模板时,IntelliJ似乎将其全部弄错了。因此,我要采取的行动是在创建新项目后,删除.idea和.iml文件,然后直接从Gradle文件中重新打开该项目。IntelliJ似乎可以更好地了解这种情况下的情况。


2
这可以解决上述错误,但删除了我的所有配置,因此未存储项目结构和模块。相反,我发现这
可行

7
为了清楚起见,“直接从Gradle文件中重新打开项目”的意思是:[打开]>选择build.gradle> [作为项目打开]
noobar 19/09/27

27

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

group = 'com.me.blah'

5
对于那些可能会问“然后为什么group 'com.me.blah'起作用?”的人,请看一下Groovy的methodMissing钩子Project如果存在的话,默认的Gradle实现显然使用此钩子将属性设置为缺少的方法的名称。
Rusty Shackleford

2
Cannot assign 'String' to 'Object'对我来说是结果。
PHPirate

16

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

解决方法:
可以添加诸如
//noinspection GroovyAssignabilityCheck
禁止警告之类的注释,但这不是必需的,因为这些都是Gradle每天的标准用法。

该问题最近已更新,并标记为已修复,可以在2016.2版中发布。



1
我需要在哪里添加评论?我现在是15.0.6,这很烦人
stewenson

@stewenson只需将其放在抱怨的代码块上方即可。
FGreg

1
我的版本2019.1.2再次发生了
Andres Farias

我使用的是2020.2 RC版本,并且这种情况仍在发生
Dhruv garg


6

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

type="WEB_MODULE"

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

type="JAVA_MODULE"

看来,答案是正确的。将模块从“ web”更改为“ java”。


3
不幸的是,这并没有解决我的问题。所做的工作是“禁用检查”。不确定这是否是最好的方法。
Kees de Kooter,2015年

3
我没有IML文件。
耗散

@Displee它可能在您的.idea目录中
Jonathan Landrum

5

对我来说,尝试所有这些答案都没有结果后,更改项目的Java SDK可以解决问题,当时我使用的是1.8,并将其更改为最新版本,但仍然是项目级语言8。

希望这可以帮助!


4

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


3

最近在Windows上发生在我身上。我尝试了以上所有方法,但是没有用。

我做了什么:

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

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

也许会帮助某人。谢谢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.