我能够使用launch4j创建一个可执行文件,它在我的机器上运行正常。当我发送给某人在他们的Windows机器上运行时,他们会收到以下错误:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: spark/TemplateEngine
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: spark.TemplateEngine
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more
有什么想法吗?
答案 0 :(得分:1)
我遇到了这个问题,因为我的java版本默认为9,并且不知何故Spark没有识别它。所以我改为版本8并且它有效。改变linux:
sudo update-java-alternatives -s java-1.8.0-openjdk-amd64
在您的情况下,您可能需要其他版本,因此请选择您的版本(列出计算机中的版本使用-l选项)。
答案 1 :(得分:0)
必须在类路径中设置相对路径,以便可执行文件可以找到jar文件
答案 2 :(得分:0)
如果您的maven依赖项没有将OPTIONS
设置为编译时间(默认值)并且依赖项jar在编译时不可用,则也可能发生此异常。例如,如果您的Edittext
编译器中的maven依赖项<scope>
将假定JRE /环境将提供这些依赖项jar,但是当编译源并且未找到这些依赖项时,将抛出此异常。
例如 - 如果在编译期间找不到spark-mllib_2.11依赖项,下面可能会导致此异常,尽管它们被添加并且在编辑期间没有错误;
<scope>provided</scope>