我写了一个java程序,main函数为drager,环境变量配置如下JAVA_HOME=/usr/java/jdk
PATH=#JAVAHOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/home/insidertracker/dataDrager/lib/sqlitejdbc-v033-nested.jar:/home/insidertracker/dataDrager/lib/log4j-1.2.15.jar:/home/insidertracker/dataDrager/lib/javapns-jdk16-161.jar:/home/insidertracker/dataDrager/lib/bcprov-jdk16-145.jar:/home/insidertracker/dataDrager/lib/commons-io-1.4.jar:/home/insidertracker/dataDrager/lib/commons-lang-2.4.jar:/home/insidertracker/dataDrager/lib/dom4j-1.6.jar我在/home/insidertracker/dataDrager/bin下面执行 , java drager 是成功的, 但是我把工程文件打包存成jar以后,再执行  java -jar dataDrager.jar drager 或者如下的shell脚本却失败  #!/bin/bash
cd /home/insidertracker/dataDrager/
/usr/java/jdk/bin/java -jar dataDrager.jar -classpath .:/usr/java/jdk/lib/tools.jar:/usr/java/jdk/lib/dt.jar:/home/insidertracker/dataDrager/sqlitejdbc-v033-nested.jar:/home/insidertracker/dataDrager/log4j-1.2.15.jar:/home/insidertracker/dataDrager/bcprov-jdk16-145.jar:/home/insidertracker/dataDrager/commons-io-1.4.jar:/home/insidertracker/dataDrager/commons-lang-2.4.jar:/home/insidertracker/dataDrager/dom4j-1.6.jar 错误提示如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at custom.scheduler.ConfigReader.<clinit>(ConfigReader.java:9)
at drager.main(drager.java:7)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
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)
... 2 more这是什么原因?

解决方案 »

  1.   

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger找不到这个类 从这入手吧是不是这个jar 没倒出去
      

  2.   

    你的java命令使用有问题。-jar 选项需要jar文件的manifest指定Class-Path和Main-Class。一般不会既使用-jar又使用 -classpath
      

  3.   

    打Jar包时没有指定main方法所在的文件
      

  4.   

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    你的main方法没有指定呀
    你重新指定一下
      

  5.   

    我找到问题所在了  ,不是main方法的问题,main已经指定了,写在了jar的Manifest里面,错误是在于shell里面是不认识linux默认的环境变量的,需要改成这样的方法来执行,
    #!/bin/bash
    cd /home/insidertracker/dataDrager/
    /usr/java/jdk/bin/java -jar dataDrager.jar -Xbootclasspath .:/usr/java/jdk/lib/tools.jar:/usr/java/jdk/lib/dt.jar:/home/insidertracker/dataDrager/sqlitejdbc-v033-nested.jar:/home/insidertracker/dataDrager/log4j-1.2.15.jar:/home/insidertracker/dataDrager/bcprov-jdk16-145.jar:/home/insidertracker/dataDrager/commons-io-1.4.jar:/home/insidertracker/dataDrager/commons-lang-2.4.jar:/home/insidertracker/dataDrager/dom4j-1.6.jar