“奇怪”;java.lang.NoClassDefFoundError“;日蚀

“奇怪”;java.lang.NoClassDefFoundError“;日蚀,java,eclipse,Java,Eclipse,直到今天下午,我更新了一些文件(包括一个ant build.xml文件),我在Eclipse中有一个Java项目一直在顺利运行。生成项目时,出现以下错误: java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter at java.net.URL

直到今天下午,我更新了一些文件(包括一个ant build.xml文件),我在Eclipse中有一个Java项目一直在顺利运行。生成项目时,出现以下错误:

java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter
Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source) at
    java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)  
Exception in thread "main" 

有人知道问题在哪里吗?

java.lang.ClassNotFoundException表示类路径问题。没有线索意味着您假设类路径设置正确,但事实并非如此

如果使用Eclipse进行构建,请确保编译的.class文件所在的目录位于类路径中,并且包含必要的.class文件

如果使用Ant构建,请确保在build.xml中看到类似的内容:

<path id="production.class.path">
    <pathelement location="${production.classes}"/>
    <pathelement location="${production.resources}"/>
    <fileset dir="${production.lib}">
        <include name="**/*.jar"/>
        <exclude name="**/junit*.jar"/>
        <exclude name="**/*test*.jar"/>
    </fileset>
</path>

更新:要么你的路径中没有JAVA_HOME/bin,要么你下载了JRE而不是JDK。检查安装Java的目录,看看/bin目录中是否有javac.exe。如果您没有/bin,请下载JDK并安装它

如果您确实有一个包含javac.exe的/bin,请检查您的路径以查看Java/bin目录是否在该路径中。设置好后,打开命令shell并键入“javac-version”以确保一切正常


您告诉Eclipse使用什么JDK

这两个问题都是因为classpathref=“master classpath”,请检查值是否正确

我最近经常看到这种情况。就在今天,我遇到了与受影响(红色标记)类位于同一包中的类的问题

退出eclipse并重新启动通常可以解决受影响类上的红旗,但有时项目上会留下红旗,然后我还需要关闭项目并重新打开它,以消除独立的红旗。在一个项目上看到一个红旗,而它的任何子目录中都没有红旗,这看起来很奇怪


对于maven项目集群,我在重新启动eclipse后关闭并打开集群中的所有项目。

这似乎是一个常见错误。解决办法是:

  • 右键单击项目
  • 选择属性
  • 选择“Java编译器”
  • 松开第一个显示“启用项目特定设置”的框
  • 申请
  • 拯救

希望这能在某些情况下有所帮助。

虽然这只是一个猜测,可能不适用于您的具体情况,但这本可以为我节省一个小时左右的时间

如果您已经将一个普通项目“转换”为Java项目(通过编辑.project文件并添加适当的标记),请确保您也有一个适当的指定标记-我的项目没有生成,即使Eclipse尝试并且没有运行构建器(成功!):


org.eclipse.jdt.core.javabuilder

我也面临同样的问题。然后发现类路径中lib文件夹的路径设置不正确

暗箭伤人,但我也遇到了同样的问题。我通过从我的工作区中删除项目(注意不要从磁盘中删除)解决了这个问题,然后重新导入了该项目,效果很好。我认为我的问题是由坏的windows关闭引起的(正确重新启动windows并不能解决问题)。HTH.

在Eclipse中执行Project->Clean…为我解决了这个问题。

当您启动程序时,它存储了您以后可能修改的启动配置。如果生成/运行过程中发生更改,则可能是设置错误。例如,我曾经使用maven,一些启动配置引用了maven2_classpath_容器。 删除启动配置并再次运行程序时,它可以再次工作

如上所述,“java.lang.ClassNotFoundException意味着类路径问题。”

在我的设置中,我运行Maven来构建(而不是Ant)并使用Eclipse(而不是Netbeans)

通常,为了构建和设置项目,我会在Windows命令提示符下运行“mvn clean”、“mvn compile”、“mvn eclipse:eclipse”。最后一个命令“mvn eclipse:eclipse”更新项目配置,创建.classpath和.project文件

为了解决这个问题,我删除了两个文件(.classpath和.project),然后重新运行了这三个命令


因此,根据您的配置,尝试查找类路径/项目文件(进行备份)并删除它们。您还可以尝试删除目标/release/build文件夹(从build命令创建的任何文件夹)。然后再次尝试构建/打包/配置您的项目。

我认为我的问题及其解决方案会有所帮助。因此,我在eclipse项目中遇到了同样的错误。在我的项目中,我有两个jar文件,并且为jar文件中的一个文件抛出了NOCLASSDEFERROR

我的库文件是我的项目继承人中文件夹名“lib”的一部分。我把文件夹名改为“libs”,瞧,它成功了


(我查看了.classpath文件,我有键值对,我的jar文件的条目有一个名为“lib”的键值,因此我认为从lib更改可能会有所帮助。)

我发现我的类路径中的WEB-INF/lib中有一个jar,但是当我将它升级到最新版本时,文件名就不同了。从类路径中删除旧的jar文件并添加新的jar文件修复了这个问题。奇怪的是,Eclipse似乎没有警告我旧的jar文件丢失了,似乎正在编译,但是没有编译任何东西,因此出现了NoClassDefFoundError。我的线索是,build/classes目录在项目中设置为输出文件夹,但在生成之后没有在那里创建任何类文件。

我看到人们已经谈论过类路径。由于没有可接受的答案,我假设它与类路径无关。所以我想补充一点,没有package指令也会导致类未找到错误。

转到构建路径并检查jar文件中的错误,它们可能会被移动
<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
</buildSpec>