1

我在 STS(spring 源工具)中创建了一个 spring 项目,它在 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>
4

2 回答 2

1

您的错误表明“Operations.class”文件不在目标/类文件夹中(或者您的包名称中有错字)。

首先确保您的课程在您期望的位置:

cd [project root]/target/classes
ls com/XXXX/XXXX/Operations.class

如果这证明文件存在,您应该能够使用您提到的 java 命令:

java com.XXXX.XXXX.Operations

确保不要在末尾添加“.class”,因为 Java 会假设您正在尝试在“Operations”包中加载一个名为“class”的文件。

如果文件丢失(我希望它会丢失),您将需要在 STS ( Project-> Build Project) 中执行构建来创建它。


更新

您在评论中提到您收到错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext

这是一个非常不同的问题,这意味着您没有在 java 命令中引用 Spring 库,因此 Java 不知道在哪里可以找到它们。

我建议您在尝试运行之前使用 STS 打包该程序。这是 Java 开发人员构建和部署应用程序的典型方式。本文提供了一个关于如何执行此操作的简单教程(STS 是 Eclipse 的一个变体)。

另外 - 您更新的问题表明您也在此应用程序中使用 Maven,在这种情况下,您可以使用“mvn package”来构建项目而不是 Eclipse。阅读本教程以开始使用 Maven:http ://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

如果您真的想在不打包的情况下运行程序;您将需要在命令中引用您正在使用的所有Jar 文件(这只是一个示例,将“spring.jar”替换为您正在使用的正确 Jar 文件):

java -classpath .;../../lib/spring.jar com.XXXX.XXXX.Operations
于 2012-04-12T10:47:04.930 回答
0

通常,人们创建 jar 文件,其中包含启动应用程序所需的所有类和资源。之后,很容易启动应用程序:

java -cp youapp-full.jar  com.XXXX.XXXX.Operations

当然Operations类必须有main方法

于 2012-04-12T11:04:20.660 回答