请解释以下关于“无法找到符号”,“无法解析符号”或“符号未找到”的错误(在Java中):

它们是什么意思? 什么东西会引起它们? 程序员如何着手修复它们?

本问题旨在针对Java中常见的编译错误进行全面的问答。


当前回答

在Eclipse中获得此错误的一种方法是:

在src/test/java中定义一个类a。 在src/main/java中定义另一个使用类A的类B。

结果:Eclipse将编译代码,但maven将给出“无法找到符号”。

潜在原因:Eclipse为主树和测试树使用了一个组合的构建路径。不幸的是,它不支持为Eclipse项目的不同部分使用不同的构建路径,而这正是Maven所要求的。

解决方案:

不要那样定义你的依赖关系;也就是说,不要犯这样的错误。 定期使用Maven构建代码库,以便尽早发现这个错误。实现这一点的一种方法是使用CI服务器。

其他回答

解决了

使用IntelliJ

选择Build->Rebuild Project将解决这个问题

我是这样解决这个错误的……疯狂的机器人。我有包的名称为适配器和我重构名称适配器与“a”而不是“a”,并解决了这个错误。

您使用maven compile编译代码,然后使用maven test运行它,结果很好。现在,如果你在代码中改变了一些东西,然后在没有编译的情况下运行它,你会得到这个错误。

解决方案:再次编译,然后运行测试。对我来说是这样的。

我们在一个Java项目中得到了一个错误,该项目被设置为Gradle多项目构建。结果发现其中一个子项目缺少Gradle Java Library插件。 这阻止了子项目的类文件对构建中的其他项目可见。

在将Java库插件添加到子项目的构建之后。用下面的方法Gradle,错误就消失了:

plugins {
    ...
    id 'java-library'
}

在Eclipse中获得此错误的一种方法是:

在src/test/java中定义一个类a。 在src/main/java中定义另一个使用类A的类B。

结果:Eclipse将编译代码,但maven将给出“无法找到符号”。

潜在原因:Eclipse为主树和测试树使用了一个组合的构建路径。不幸的是,它不支持为Eclipse项目的不同部分使用不同的构建路径,而这正是Maven所要求的。

解决方案:

不要那样定义你的依赖关系;也就是说,不要犯这样的错误。 定期使用Maven构建代码库,以便尽早发现这个错误。实现这一点的一种方法是使用CI服务器。