使用java -cp xx.jar xxx类名 命令执行java程序报错:
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.guess.util.JdbcUtils
at com.guess.util.WordsUtils.truncateTable(WordsUtils.java:683)
at com.guess.DriverV2.main(DriverV2.java:54)
分析异常:在调用方法或者new创建实例时,java虚拟机或者类加载器试图载入类定义,但是找不到类定义;编译当前执行类时,类是存在,但是现在找不到了。
找到 Could not initialize class com.guess.util.JdbcUtils 这个类 ,查看其static代码块是类加载器加载mysql连接。考虑是没有mysql的连接jar包。
通过增加-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${extJarsPath} 来指定需要的额外jar包的路径,多个路径用冒号隔开。
注意:ava.ext.dirs 本身的值是${JAVA_HOME}/jre/lib/ext,自己新增的额外jar包的路径用冒号分隔开。
另外在Windows的cmd下执行,最好加上 -Dfile.encoding=utf-8 ,指定为utf8编码运行,否则写本地文件可能出现中文乱码问题。
完整命令:
java -Dfile.encoding=utf-8 -Djava.ext.dirs=${javaHome}/jre/lib/ext:${extJarsPath} -cp xxx.jar xxxx