用eclipse导出jar包到虚拟机上用hadoop运行时遇到的问题

问题描述:
用eclipse写好代码后,在windows上运行正常。将其导出成jar文件,并放到ubuntu虚拟机上运行出现问题:

Exception in thread "main" java.lang.ClassNotFoundException: matrixMul
	at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:237)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:158)

步骤1:导出jar包时,指定类位置

我的matrixMul类中包含了另外两个类,可能让机器不知道从哪个类开始。

在导出jar时,不直接点Finish,而是点Next

直到看到这个界面:

选择开始的类:

但是ubuntu执行新生成的jar后,出现了新的问题:

Exception in thread "main" java.lang.UnsupportedClassVersionError: mapreduce/matrixMul has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at org.apache.hadoop.util.RunJar.run(RunJar.java:237)
	at org.apache.hadoop.util.RunJar.main(RunJar.java:158)


看开头的那句话,意思是版本问题

步骤2:修改java版本

在ubuntu上运行javac -version查看版本

而eclipse用的是JavaSE-17。虽然不知道他们之间是什么关系,但感觉就是这里的问题。

新建一个java项目,该版本为java1.8

重新执行之前做的事,这次终于成功:

可喜可贺,可喜可贺!

posted @ 2022-11-04 15:35  white514  阅读(189)  评论(0编辑  收藏  举报