线程" main"中的例外情况java.lang.NoClassDefFoundError:java / util / function / Predicate

时间:2015-07-20 11:44:48

标签: java windows maven ubuntu jar

我使用

创建了一个jar文件
mvn assembly:assembly -DdescriptorId=jar-with-dependencies

我在Windows上运行它并且工作正常并按预期工作。然后我在Ubuntu上运行它,它给出了以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: java/util/function/Predicate
at Maxima_ImageJ.run(Maxima_ImageJ.java:13)
at Maxima_ImageJ.main(Maxima_ImageJ.java:27)
Caused by: java.lang.ClassNotFoundException: java.util.function.Predicate
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at 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)
    ... 2 more

我不知道为什么它在Windows和Ubuntu中的工作方式不同。如果有人这样做,请帮忙。它与java的版本有关吗?

2 个答案:

答案 0 :(得分:4)

将类路径设置为Java 1.8,因为java.util.function.Predicate是JavaSE8的一部分,并且在执行maven命令之前的1.7 set命令中将不可用。

set path=C:\Program Files\Java\jdk1.8.0_05\bin//UPTO Bin
set JRE_HOME=C:\Program Files\Java\jre8//Upto Root folder of JRE
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_05//UPTO Root folder of JDK

答案 1 :(得分:2)

使用以下命令检查您的java版本。

readlink -f $(java)

如果小于1.8,则必须更新Java_Version。

一种方法是在.bashrc文件中编辑。