使用
成功编译了我的Hbase类javac -cp "/hbase/lib/*" CreateTable.java
但是在跑步过程中它会抛出错误
java CreateTable
线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / hadoop / hbase / HBaseConfiguration 在CreateTable.main(CreateTable.java:16) 引起:java.lang.ClassNotFoundException:org.apache.hadoop.hbase.HBaseConfiguration 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:366) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ......还有1个
答案 0 :(得分:1)
javac -cp `hbase classpath` CreateTable.java
java -cp `hbase classpath` CreateTable
其中hbase classpath
是集群类路径,其中集群已安装hbase jar文件
如果要查看hbase / lib的文件夹位置,
你可以去hbase shell并尝试你的hbase lib jar将会显示在那里。
注意:如果你在构建中使用maven,那么你必须将'provided'设置为你提到groupid,artifactid等的范围......
答案 1 :(得分:0)
除了指定编译程序所依赖的库的类路径外,还需要在执行程序时指定它们。依赖关系不是“编译”的,它们只是在编译期间被引用以确保它们被正确链接,但它们也需要在运行时存在。
因此,您可能希望运行类似java -cp ".;/hbase/lib/*" CreateTable
的内容,以便在运行时使用与编译时相同的库,以及编译的.class文件所在的当前目录。
在企业程序中,通常像Maven这样的依赖管理系统,或者至少是大多数IDE中内置的依赖管理系统,用于帮助跟踪依赖关系并使用正确的路径调用Java和相关工具。