Java无法访问类,找不到类文件。

44

当我尝试在IntelliJ中创建项目时,在这一行上收到以下错误:

Sentence sent = new Sentence();
 sent.emptySegments();

错误:

Error:(151, 10) java: cannot access javax.xml.bind.RootElement
class file for javax.xml.bind.RootElement not found

Sentence 是一个实现了 RootElement 接口的类。

import javax.xml.bind.RootElement;
...
public class Sentence extends MarshallableRootElement implements RootElement   {

所有的包都存在,我可以跳转到每个接口或类的声明,但我不知道为什么IntelliJ说它无法访问或找到它们?然而RootElement是一个接口而不是类。

public interface RootElement extends Element {
    void validate() throws StructureValidationException;
}

上述声明位于名为 jaxb-rt-1.0-ea.jar 的 jar 文件中,存在于项目库中。


问一个显而易见的问题,jaxb-rt-1.0-ea.jar在构建时是否已添加到您的项目依赖项中? - Tim Biegeleisen
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ahmad
这就是我猜测的问题所在。 - Tim Biegeleisen
@TimBiegeleisen 谢谢,完整答案在我的回答下面。 - Ahmad
14个回答

124

试试这个

  1. 进入文件菜单
  2. 选择无效缓存/重启
  3. 您可以只选择无效并重新启动

(参见IntelliJ手册中的无效缓存)


15
有时候Intellij就是愚蠢J。对我有用。 - Narm
1
你刚刚拯救了一个灵魂。 - lordvidex
你刚刚拯救了另一个灵魂。 - Guntur Santoso
我也试过了,可以用。 - girijanandan nucha

24

该项目包含多个模块,尽管库已添加到项目库中,但某些模块在其依赖部分缺少该库。因此我在IntelliJ中使用以下步骤解决了这个问题。

创建一个模块库并将其添加到模块依赖项中:

  1. 打开项目结构对话框(例如Ctrl+Shift+Alt+S)。
  2. 在对话框的左侧窗格中,选择“模块”。
  3. 在右侧的窗格中,选择所需的模块。
  4. 在对话框的右侧部分,在“模块”页面上,选择“依赖项”选项卡。
  5. 在“依赖项”选项卡上,点击+(位于右上方),然后选择“Jars或目录”。
  6. 在打开的对话框中,选择必要的文件和文件夹。这些可以是单个.class和.java文件,包含这些文件的目录和存档(.jar和.zip),以及带有Java本地库(.dll、.so或.jnilib)的目录。
  7. 单击“确定”。如有必要,请选择“导出”选项,并更改依赖范围。
  8. 点击“确定”在“项目结构”对话框中完成设置。

3
为什么我要做这件事? - sadalsuud
对我来说,编译一切正常,但在我的项目中,IDE 显示了红色下划线。我发现依赖项被标记为运行时范围。一旦我将模块依赖项范围更改为编译,它就消除了红色下划线。 - codester
也许这是解决IntelliJ问题的变通方法。谢谢。 - VIJAYKUMAR SUBRAMANI

22

文件 -> 无效缓存/重启, 这对我来说在长时间的无效尝试之后起了作用。


8

重新构建项目对我有用。


5

我删除了.idea文件夹,然后运行无效化缓存/重启,这对我有用。


只是清除缓存/重启对我有效。 - slipperypete

2
可能是因为您没有将依赖项添加到类路径中,而这些依赖项在其他依赖项中使用。
例如:您使用库A,但您正在使用的类具有来自库B的超类。 但是您没有将B添加到类路径中。

1
如果只是单个文件的问题,您可以尝试删除该文件并撤销操作。这似乎会重新索引该特定文件,比无效缓存/重启要快得多。作为预防措施,在删除之前,您可以备份该文件,以防万一出现意外情况。
另一个可能原因是同一库的不同版本具有更多/更少的方法。我在Gradle中遇到过这种情况。有时它可以编译成功,有时则不行。只需找到并删除不必要的部分即可。

0
如果你已经尝试过重建或清除缓存,但仍然无法解决问题,我发现删除该类并添加一个具有相同代码的新类可以解决问题。

0
类似问题可能会发生在使用maven范围为runtime的库时。

这种情况下,它无法被位于src/main/java下的类访问。

只有src/test/java中的类可以直接使用runtime依赖项。


0

对我来说,解决方法是关闭Windows Defender / 将项目文件夹添加到排除列表 / 关闭Idea进程。


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