运行JMS消费者时出现java.lang.NoClassDefFoundError错误

5

我想运行一个我做的类,但是我得到了这个错误:

主线程中的异常. java.lang.NoClassDefFoundError: javax/jms/Destination

我不明白为什么即使我在类路径中包含了必要的jar包,它也无法正常工作:

java consumer1 -cp activemq-all-5.3.2.jar


1
activemq-all-5.3.2.jar 是否与 consumer1 在同一目录下? - Martijn Verburg
1
你是否检查了 activemq-all-5.3.2.jar 文件,确保它包含该类?(可能是损坏的构件)你可以执行 'jar tvf activemq-all-5.3.2.jar' 命令来查看。 - Martijn Verburg
我在Eclipse中展开了JAR文件进行检查,它确实存在。 - Jeune
1个回答

5
< p > java 命令的 -cp 选项应该在类名之前指定:

java -cp .;activemq-all-5.3.2.jar consumer1

否则,它会被视为您的main方法的参数,而不是java的参数。另外请注意,如果您使用-cp选项指定类路径,则需要包含当前目录以便从中运行.class文件。

我之前在类名前使用了-cp选项。这次唯一的区别是我添加了“.;”这个东西,这是什么意思?是为了将当前文件夹中的所有内容包含在类路径中吗?但是如果当前文件夹中没有依赖项,我不明白为什么需要这样做。 - Jeune
1
@Jeune:当你使用 java consumer1 命令时,consumer1 是类路径中的类名。默认情况下,类路径是当前目录,因此该命令将从其中运行 consumer1.class 文件。当你使用 -cp 选项时,你将覆盖默认的类路径,因此你需要显式地指定当前文件夹以便从其中运行 consumer1.class 文件。 - axtavt
3
注意:在Linux上,你需要使用:作为分隔符,而不是;。这个问题曾经让我十分困扰。 - Prinzhorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接