在NetBeans中出现"Cannot find symbol"错误

8
我使用NetBeans 7、Maven和NetBeans平台开展学校项目。该项目使用“Maven/POM项目”项目模板创建,是一个多层次的“企业”应用程序,使用了几个模块(模型、集成、业务、演示、丰富的客户端应用程序以及其他一些模块)。
这些模块之间存在依赖关系(但没有循环依赖)。问题是,无论是Maven还是NetBeans,都会经常出现各种问题,而且看似没有任何触发器。我不得不不断重新编译模块、关闭和重新打开NetBeans、清除NetBeans缓存、删除并重新添加依赖项等,才能暂时解决这些问题。我在Windows XP SP3和Mac OS X上安装的两个不同版本的NetBeans上都遇到了这些问题。
症状如下:
1) 有时候,NetBeans会认为从另一个模块导入的所有类都不存在(我会得到cannot find symbol错误)。这种情况反复出现,有时候甚至是刚刚成功编译过的模块。大多数情况下,重新编译依赖项没有帮助。必要的依赖项已在POM中声明,JAR文件也存在,如果我在项目视图中展开它们,我可以看到相关的类。
2) 有时候,NetBeans会认为导入的类的方法实际上没有抛出它声明要抛出的异常。由于对这种方法的调用通常被try块包围,因此NetBeans显示错误消息:a.package.SomeException is never thrown in body of corresponding try statement。如果我不删除try块,模块就无法编译,因为NetBeans会报错。如果我删除了try块,模块也无法编译,因为Maven(由于某种原因)可以看到异常,并抱怨它没有被捕获。这种情况也经常发生,我不太确定如何可靠地解决它。
目前,Maven和NetBeans的问题非常严重,我实际上无法继续开展项目。如果我不必使用NetBeans和Maven,我早就回到vim和Makefiles了。有人能否至少认识到这些问题? 编辑: 我已经提交了这个项目,得到了30分(满分20分)的额外工作奖励,直到它离开alpha阶段,我希望永远不再与NetBeans合作。

2
尝试在NetBeans之外使用命令行对项目进行Maven构建,以查看问题是否来自于NetBeans或Maven。 - Istao
我刚刚升级到了NetBeans 7.1。现在,Maven可以编译所有文件而没有问题,但是NetBeans仍然显示某些文件中的“无法找到符号”。 - Honza
我只是想知道这些事情是如何发生的。这个软件中有一个重大的漏洞,使其几乎无法使用,但为什么每个人都假装它不存在呢? - Honza
在NetBeans中,你确定你的项目是一个Maven项目吗?(-> 在项目窗口中,项目标志节点是一个带有左上角小“m”的杯子)。 - Istao
这是一个Maven项目,没错,只不过它是一个使用Maven的NetBeans平台应用程序。因此,模块容器的标志看起来像字母"ma",而各个模块的标志则像是带有"m"字母的拼图块。 - Honza
5个回答

2

我在Netbeans 7.0.0中的多模块maven项目中遇到了一个问题,is never thrown掩盖了一个cannot find symbol

问题中的符号是maven主项目下另一个模块中的类。

我重构/重命名了未被找到的类 - 这解决了问题。然后我把它重新命名回来 - 问题仍然得到了解决。

虽然不是理想的解决方案,但我想分享一下。


这似乎不是我的情况,但它可能对其他人有用,所以感谢评论。 - Honza
谢谢,这很有帮助。在多模块项目中,即使依赖项存在,也会被标记为丢失(找不到符号)。这是一个非常烦人的错误。重命名并重新构建可以解决问题。 - Lenymm

0

移除依赖项,构建(并获取编译错误),然后重新添加它(手动、从pom.xml或从界面)对我有所帮助。但我同意这是一个重大的错误。


0

我曾经在NetBeans 8.0.2中遇到过这个问题。显然与project lombok有关,但我不知道为什么会发生这种情况。我安装了Maven,并对我的每个项目执行了“mvn clean install”,然后问题似乎得到了解决。之后,NetBeans又开始正常工作了。


0
我在使用Netbeans时遇到了一个问题,它标记了错误'...Exception is never thrown in body of corresponding try statement'。虽然项目可以构建成功,但错误消息不会消失。最终我通过退出并重新打开Netbeans来解决了这个问题。
我在Mac上使用,关闭按钮实际上并没有关闭Netbeans,需要完全退出。

-1

如果您有多个项目,请注意NetBeans的“保存时编译”选项,如果其中一些依赖项已经启用了此选项,则主项目的编译将失败。请禁用自动保存时编译选项,重新编译依赖项(清理并构建),然后问题应该就解决了。


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