Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
引用项目中的类的java.lang.NoClassDefFoundError_Java_Eclipse - Fatal编程技术网

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

引用项目中的类的java.lang.NoClassDefFoundError,java,eclipse,Java,Eclipse,在我的名为Bookyard.Server的项目中,我引用了我的另一个名为Bookyard.Contracts的项目 在Eclipse for Java EE,Mars 2中,我为Bookyard.Server项目设置构建路径和项目引用,如下所示: 我还将Bookyard.Contracts项目的bin文件夹添加到%CLASSPATH%中,如下所示: 但是,当我调试我的Bookyard.Server项目时,在它引用contracts项目的行上,它会引发java.lang.NoClassDef

在我的名为Bookyard.Server的项目中,我引用了我的另一个名为Bookyard.Contracts的项目

在Eclipse for Java EE,Mars 2中,我为Bookyard.Server项目设置构建路径和项目引用,如下所示:

我还将Bookyard.Contracts项目的bin文件夹添加到
%CLASSPATH%
中,如下所示:

但是,当我调试我的Bookyard.Server项目时,在它引用contracts项目的行上,它会引发
java.lang.NoClassDefFoundError
异常,异常为
practice/Bookyard/contracts/Constants

书场,服务器


由于项目之间存在依赖关系,因此需要添加Bookyard.Contracts。在项目属性的部署程序集部分下

因为需要添加Bookyard.Contracts的项目之间存在依赖关系。在项目属性的部署程序集部分

中,我对我的Eclipse2020-12工作区进行了一些重组后,得到了NoClassDefFoundError,其中我有8个合作项目。这些项目相互依赖,我使用PackageExplorer->右键单击project name->build Path->Configure build Path…->“项目”选项卡->“添加…”按钮

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

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

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

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

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

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

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

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


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

在对我的Eclipse2020-12工作区进行重新组织后,我得到了NoClassDefFoundError,其中我有8个合作项目。这些项目相互依赖,我使用PackageExplorer->右键单击project name->build Path->Configure build Path…->“项目”选项卡->“添加…”按钮

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

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

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

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

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

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

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

假设2:当Eclipse将较低级别项目的“is模块化”信息添加到另一个项目的“必需项目”中时,它可能会复制该信息。其结果是,如果“模块化”信息发生更改,则依赖的项目将不同步。如果
import practice.bookyard.contracts.Constants;
...
if (!body.get("sub").toString()
       .contentEquals(Constants.JWT_SUBJECT_LOGIN_REQUEST))