陈先森 2012-10-02
Hadoop1.0.3的Eclipse Plugin网上可以下载到,最近自己编译,发现了不少问题,在网上找了很多的资料,编译都出错,经过摸索,终于编译成功,方法如下:
首先在${hadoop-src-root}/src/contrib/eclipse-plugin/build.properties中设置eclipse.home,如 eclipse.home=/path/to/eclips,在 ${hadoop-src-root}/src/contrib/build-contrib.xml中添加<property name="version" value="1.0.3"/>。其中${hadoop-src-root}是hadoop源文件目录。
2.在在 ${hadoop-src-root}下执行ant compile,我的JDK是1.7,报如下错误:
[javac] /home/dong/hadoop-1.0.3/src/contrib/gridmix/src/java/org/apache/hadoop/mapred/gridmix/Gridmix.java:399: 错误: 类型参数? extends T不在类型变量E的范围内
[javac] /home/dong/hadoop-1.0.3/src/contrib/gridmix/src/java/org/apache/hadoop/mapred/gridmix/Gridmix.java:396: 错误: 类型参数? extends T不在类型变量E的范围内
[javac] private <T> String getEnumValues(Enum<? extends T>[] e) {
[javac] ^
[javac] 其中, T,E是类型变量:
[javac] T扩展已在方法 <T>getEnumValues(Enum<? extends T>[])中声明的Object
[javac] E扩展已在类 Enum中声明的Enum<E>
[javac] /home/dong/hadoop-1.0.3/src/contrib/gridmix/src/java/org/apache/hadoop/mapred/gridmix/Gridmix.java:399: 错误: 类型参数? extends T不在类型变量E的范围内
[javac] for (Enum<? extends T> v : e) {
[javac] ^
[javac] 其中, T,E是类型变量:
[javac] T扩展已在方法 <T>getEnumValues(Enum<? extends T>[])中声明的Object
[javac] E扩展已在类 Enum中声明的Enum<E>
[javac] 注: /home/dong/hadoop-1.0.3/src/contrib/gridmix/src/java/org/apache/hadoop/mapred/gridmix/Gridmix.java使用了未经检查或不安全的操作。
[javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[javac] 2 个错误
解决方法是把Enum<? extends T>改成Enum<?>,两处都要改动,重新ant compile,成功。
3.到src/contrib/eclipse-plugin/下先ant compile然后ant jar,报错如下:
BUILD FAILED
/home/dong/hadoop-1.0.3/src/contrib/eclipse-plugin/build.xml:69: Warning: Could not find file /home/dong/hadoop-1.0.3/build/hadoop-core-${version}.jar to copy.
解决办法:把hadoop根目录下的hadoop-1.0.3-core.jar复制到hadoop根目录下的build文件中,重新ant jar,成功。
在hadoop/build/contrib/eclipse-plugin/下生成hadoop-1.0.3-eclipse-plugin.jar。搞定!