有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

eclipse java。引用项目中的类的lang.NoClassDefFoundError

在我名为Bookyard的项目中。服务器,我引用了我的另一个名为Bookyard的项目。合同

在Eclipse for Java EE,Mars 2中,我为书场设置了构建路径项目引用。服务器像这样的项目:

enter image description here

enter image description here

我还添加了书场的bin文件夹。合同%CLASSPATH%项目,如下所示:

enter image description here

然而,当我调试我的书场时。服务器project,在它引用合同项目的那一行,它为practice/bookyard/contracts/Constants引发了一个java.lang.NoClassDefFoundError异常

Bookyard.Server

import practice.bookyard.contracts.Constants;
...
if (!body.get("sub").toString()
       .contentEquals(Constants.JWT_SUBJECT_LOGIN_REQUEST))

共 (3) 个答案

  1. # 1 楼答案

    在对我的Eclipse2020-12工作区进行了一些重组之后,我得到了NoClassDefFoundError,我在其中有8个合作项目。这些项目相互依赖,我使用Package Explorer输入了依赖项->;右键单击项目名称->;构建路径->;配置生成路径->;“项目”选项卡->;“加上……”按钮

    背景:因为我在Java模块系统中遇到了很多问题,所以我决定完全避免它,并继续使用Java 1.8,尽管我已经(不要问我为什么)将JavaSE-13(也显示为“JRE 13”)作为我的运行时。现在回到我的观察和最后的解决方案:

    观察1:我的一些项目被勾选为“启用项目特定设置”,而其他项目则没有

    观察2:在“Java构建路径”对话框中->;选项卡“项目”我注意到关于“构建路径上的必需项目”的信息不一致。同一个较低级别的项目在一些使用它的项目上显示为“模块化”,在其他项目上显示为“非模块化”。(要查看有关所需项目的“模块化或非模块化”信息,请单击名称前面的>;展开其行)

    解决方案(第1部分):对于工作区中的所有项目,我确保它们在项目属性对话框“Java编译器”的“启用项目特定设置”中没有打勾。所以他们现在应该共享“Java编译器”的工作区设置

    解决方案(第2部分):在每个项目的“必需项目”列表中,我删除了列为“Is模块化”的项目条目,并立即再次添加它们。在这次操作之后,我的8个项目中所有需要的项目都被列为“非模块化”

    效果:现在软件又可以正常运行了

    假设1:类加载器在项目中查找类文件时可能使用不同的搜索机制,这取决于使用项目是否将其使用的项目声明为模块化

    假设2:当Eclipse将较低级别项目的“is模块化”信息添加到另一个项目的“必需项目”中时,它可能会复制该信息。其结果是,如果“模块化”信息发生变化,依赖的项目将不同步。如果这是真的,Eclipse应该只引用“is模块化”信息,以防它发生变化时接收事件

    我的观点:我认为这是一个错误。为什么?需要另一个项目的项目不应取决于另一个项目是否“模块化”

  2. # 2 楼答案

    由于项目之间存在依赖关系,因此需要添加Bookyard。合同。在项目属性的部署组件部分下

  3. # 3 楼答案

    有时,如果类的构造函数或静态块中存在未捕获的异常,则会出现NoClassDefFoundError。主要错误被NoClassDefFoundError抑制