运行jar包环境问题

本地windows环境编写的maven项目,开发自定义基于zookeeper的同一配置管理(作业)。`mvn package`打出jar包后拷贝到云主机上运行: `java -cp jarPath com.wupulin.zookeeper.HdoopConfigUpdater test` 报错,编写helloworld `javac java`运行正常。/etc/profile中java配置: ``` export JAVA_HOME=/data/programs/jdk1.8.0_101 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ``` ``` [root@Node-2 ~]# java -cp zookeeperDev-0.0.1-SNAPSHOT.jar com.wupulin.zookeeper.HadoopConfigUpdater test Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/zookeeper/Watcher at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetMethodRecursive(Class.java:3048) at java.lang.Class.getMethod0(Class.java:3018) at java.lang.Class.getMethod(Class.java:1784) at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.Watcher at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more ```

wangxiaolei

赞同来自:

报错提示找不到zookeeper的Watcher类,应该是缺少zookeeper的jar包导致的。 检查下mvn项目中有没有依赖zookeeper的jar包

道长

赞同来自:

pom.xml中添加了依赖,编译都通过的.eclipse本地是能运行的。         <dependency>             <groupId>org.apache.zookeeper</groupId>             <artifactId>zookeeper</artifactId>             <version>3.4.5</version>         </dependency>

fish - Hadooper

赞同来自:

pom.xml中加了依赖只解决的是编译问题。在执行时,所需要的所有类所在的jar包,都需要通过classpath能找到(定义到classpath中)。你可以通过-cp 1.jar:2.jar:3.jar... 的方式全包含上。   在执行hadoop相关任务时,将所有依赖包(包含你这里的zookeeper)放到hadoop的classpath之后,可以用用hadoop jar <main_class> 方式来代替 java -cp,节省找classpath的工作。   如果非要用java -cp,可以用: java -cp `hadoop classpath`:xxxx.jar:yyy.jar。这里的 `hadoop classpath`,是执行一个hadoop的命令,获取hadoop的所有classpath列表,请确保这个命令可执行(必要时加上hadoop的绝对路径)。xxxx.jar:yyy.jar是除了hadoop系统包之外的额外的你需要加的包(比如你自己实现的jar)。

要回复问题请先登录注册