Java 尝试在servlet上运行维护任务时获取NoClassDefFoundError
我有一个运行良好的servlet应用程序,不想将一些类复制到单独的项目中,我在其中开发了一个命令行维护工具。但是,在尝试运行此工具时,我遇到一个NoClassDefFoundError:Java 尝试在servlet上运行维护任务时获取NoClassDefFoundError,java,classpath,Java,Classpath,我有一个运行良好的servlet应用程序,不想将一些类复制到单独的项目中,我在其中开发了一个命令行维护工具。但是,在尝试运行此工具时,我遇到一个NoClassDefFoundError: [juhani@hadoop01 WEB-INF]$ java -classpath .:/usr/share/tomcat5/webapps/xyz/WEB-INF/classes/ xyz.logger.FileToHBaseTransfer Exception in thread "main" java.
[juhani@hadoop01 WEB-INF]$ java -classpath .:/usr/share/tomcat5/webapps/xyz/WEB-INF/classes/ xyz.logger.FileToHBaseTransfer
Exception in thread "main" java.lang.NoClassDefFoundError: xyz/logger/FileToHBaseTransfer
Caused by: java.lang.ClassNotFoundException: xyz.logger.FileToHBaseTransfer
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: xyz.logger.FileToHBaseTransfer. Program will exit.
一些健康检查:
我已经重新检查了文档中的文件位置,没有发现任何明显的错误,尽管我确信这是类似于这些内容的。在这个问题上被难住了一段时间,似乎已经停止取得进展,因此,如果能找到原因,我们将不胜感激
进口
(以及我正在使用的完整的未扩展类路径。我只是将其删除到最小的相关部分,以避免与其他问题混合):
任何其他依赖项都在同一个包中
package xyz.logger;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTablePool;
java -classpath .:/usr/share/tomcat5/webapps/xyz/WEB-INF/classes/:/usr/lib/hbase/:/usr/lib/hadoop/:/etc/hbase/conf/:/etc/hadoop/conf/ xyz.logger.FileToHBaseTransfer
可能相关吗?
如果我尝试使用正确的claasspath运行javap,它将找不到类:
[juhani@hadoop01 WEB-INF]$ javap -classpath ./classes/ xyz.logger.FileToHBaseTransfer
ERROR:Could not find xyz.logger.FileToHBaseTransfer
仅验证类格式,它实际上是1.6()
好吧,这真的很愚蠢,但是在eclipse调试器中运行并仔细比较了巨大的类路径之后,结果证明,整个过程中出现的问题是我将类名写成了HBase,而不是HBase
希望这对其他人是一个警告,我所做的随机诊断可能会帮助其他人解决相关问题哪些类是
FileToHbaseTransfer
依赖的?我想这并不仅仅是java.lang.Object
。将导入添加到post
[juhani@hadoop01 WEB-INF]$ javap -classpath ./classes/ xyz.logger.FileToHBaseTransfer
ERROR:Could not find xyz.logger.FileToHBaseTransfer
[juhani@hadoop01 ~]$ hexdump /usr/share/tomcat5/webapps/xyz/WEB-INF/classes/xyz/logger/FileToHbaseTransfer.class
0000000 feca beba 0000 3200 8700 0007 0102 2600