我在STS中创建了一个Spring项目(spring source tool),它可以在STS中正常工作(编译和执行),但是当我从终端运行类文件时,我收到如下错误:
线程“main”中的异常java.lang.NoClassDefFoundError:com / XXXX / XXXX / Operations
引起:java.lang.ClassNotFoundException:com.XXXX.XXXX.Operations
以下参考是我的.classpath文件:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java" />
<classpathentry kind="src" output="target/test-classes"path="src/test/java" />
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/
org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5" />
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" />
<classpathentry kind="output" path="target/classes" />
<classpathentry exported="true" kind="var" path="M2_REPO" />
</classpath>
答案 0 :(得分:1)
您的错误表明“Operations.class”文件不在target / classes文件夹中(或者您的包名中有拼写错误)。
首先确保您的课程符合您的期望:
cd [project root]/target/classes
ls com/XXXX/XXXX/Operations.class
如果这证明文件存在,您应该能够使用您提到的java命令:
java com.XXXX.XXXX.Operations
确保最后不添加“.class”,因为Java会假设您正在尝试在“Operations”包中加载名为“class”的文件。
如果文件丢失(我希望它会丢失),您需要在STS(Project
- &gt; Build Project
)中执行构建以创建它。
您在评论中提到您收到错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
这是一个非常不同的问题,这意味着您没有在java命令中引用Spring库,因此Java不知道在哪里找到它们。
我建议您在尝试运行之前使用STS打包程序。这是Java开发人员构建和部署应用程序的典型方式。 This article提供了一个关于如何执行此操作的简单教程(STS是Eclipse的一种变体)。
添加 - 您的更新问题表明您也在此应用程序中使用Maven,在这种情况下,您可以使用“mvn package”来构建项目而不是Eclipse。阅读本教程以开始使用Maven:http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
如果您真的想要在不打包的情况下运行该程序;您需要在命令中引用 ALL 您正在使用的Jar文件(这只是一个示例,将“spring.jar”替换为您正在使用的正确Jar文件):
java -classpath .;../../lib/spring.jar com.XXXX.XXXX.Operations
答案 1 :(得分:0)
通常,人们会创建jar文件,其中包含启动应用程序所需的所有类和资源。之后,它很容易启动应用程序:
java -cp youapp-full.jar com.XXXX.XXXX.Operations
Operations
类必须有主要的课程方法