今天倒腾Hadoop,要修改源码,由于之前搞研究是基于hadoop1.0.3来做的,所以这次也用的这个版本,但是我电脑上Java的版本是1.8以上的,结果用ant编译hadoop源码报错,错误大概是这样:
compile-mapred-classes: Trying to override old definition of task jsp-compile [javac] /Users/lili/快盘/hadoop-1.0.3/build.xml:540: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 14 source files to /Users/lili/快盘/hadoop-1.0.3/build/classes [javac] 警告: [options] 未与 -source 1.6 一起设置引导类路径 [javac] /Users/lili/快盘/hadoop-1.0.3/src/mapred/org/apache/hadoop/mapreduce/lib/partition/InputSampler.java:319: 错误: 不兼容的类型: Object[]无法转换为K[] [javac] K[] samples = sampler.getSample(inf, job); [javac] ^ [javac] 其中, K,V是类型变量: [javac] K扩展已在方法 <K,V>writePartitionFile(Job,Sampler<K,V>)中声明的Object [javac] V扩展已在方法 <K,V>writePartitionFile(Job,Sampler<K,V>)中声明的Object [javac] 1 个错误 [javac] 1 个警告
一看估计是Java版本问题导致的,然后就想降低Java版本去编译一次,谁知下载下来个JDK1.7安装确报错,错误类似于这样:
果然一搜索好多人遇到这个问题,在一个博客里找到一个比较好的解决方案,博客地址:http://blog.csdn.net/daiyelang/article/details/42779645,将解决思路copy过来了,如果不妥,请通知删除。解决思路如下:
1.下载 好jdk 1.7(1.8) 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.打开下载 好的jdk 安装包的DMG .这时候你会在finder在左侧能看到已经被挂上了。 3.运行: pkgutil --expand /Volumes/JDK 8 Update 05/JDK 8JDK 8.pkg /Users/wxxu/Documents/jdk8.unpkg //此处可能每个人的8.pkg文件目录不一样,大家只要进到自己的8.pkg就可以了 解释: 通过pkgutil 命令把刚刚下载好的dmg解压开来,存放到/Users/wxxu/Documents/jdk8.unpkg这个目录中去 4. 走入到/Users/wxxu/Documents/jdk8.unpkg目录中去。你可以通过finder也可以通过终端命令进入。 5. 找到目录下的 Distribution 文件,用vim 或者是编辑器打开。 6. 找到里面的 pm_install_check 这个函数。 function pm_install_check() { if(!(checkForMacOSX('10.7.3') == true)) { my.result.title = 'OS X Lion required'; my.result.message = 'This Installer is supported only on OS X 10.7.3 or Later.'; my.result.type = 'Fatal'; return false; } return true; } 你会发现,他在这里去判断 你的系统是不是10.7.3以后的,因为现在Yosemide还不是正式版本,所以在这里会检查不过。 修改成: function pm_install_check() { return true; } 保存。 7.然后我们重新打包。命令如下: pkgutil –flatten /Users/wxxu/Documents/jdk8.unpkg/ /Users/wxxu/Documents/jdk8.pkg 8. 打开 重新打包的jdk8.pkg文件。就会发现可以正常安装了。 安装成功后,再命令行中输入java -version显示如下 java version "1.8.0"Java(TM) SE Runtime Environment (build 1.8.0-b132)Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode) 然后就心情享受吧!!!