原始码是从这个网址下载的 https://github.com/Maki94/kmeans_mapreduce
如果我使用他提供的 executable_jar/kmeans_mapreduce.jar 可以正常执行
但如果我自己下指令把 .java 编译成 .class
find -name "*.java" > source.txt
hadoop com.sun.tools.javac.Main @source.txt -d ./classes
再用 jar 指令把这些 .class 打包成 jar 档案
jar cf km.jar ./classes
然后修改他提供的 run.sh 档
把 JAR_PATH 从 ./executable_jar/kmeans_mapreduce.jar 改成 ./km.jar
之后执行 run.sh 就会跳出下面的主要错误讯息
Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class
KMeansMapper not found
Caused by: java.lang.ClassNotFoundException: Class KMeansMapper not found
我检查自行打包的 jar 档的结构跟他提供的 jar 档的结构并没有不同,
KMeansMapper.class 都是放在 jar 根目录底下,只是他的 jar 多了很多其他东西,但
错误讯息跟多的那些东西“看起来”没有直接相关
目前怀疑是 JobIterator.java 中的 setJarByClass(getClass()); 没起到效果
但不知道该从何改起,我试过把这行注解掉,还是出现同样的错误讯息
想请问自行编译原始码却出现这种找不到类别的错误该怎么排除呢?