Hadoop1.0.3编译Eclipse plug-in

陈先森 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。搞定!

相关推荐