【问题标题】:Exception in thread "main" java.lang.NoClassDefFoundError: java/util/function/Predicate线程“main”中的异常 java.lang.NoClassDefFoundError: java/util/function/Predicate
【发布时间】:2015-07-20 19:59:35
【问题描述】:

我创建了一个 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的版本有关吗?

【问题讨论】:

  • 你运行的是什么版本的java?这不适用于低于 1.8(java 8) 的 jre 版本
  • 我认为我的 Ubuntu 机器中的默认值是 1.7.0_75。 1.8以下的jre版本不能运行什么?
  • java.util.function.Predicate 作为 java 8 的一部分引入,因此代码不适用于 jre

标签: java windows maven ubuntu jar


【解决方案1】:

将类路径设置为 Java 1.8,因为 java.util.function.Predicate 是 JavaSE8 的一部分,并且在 1.7 中将无法使用一些在执行 maven 命令之前使用的 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

【讨论】:

    【解决方案2】:

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

    readlink -f $(哪个java)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 2020-05-08
      相关资源
      最近更新 更多