无法使用Java8构建Hadoop 2.4.1

fxm*_*fxm 15 hadoop maven java-8

问题非常简单.我正在尝试使用以下命令在Windows上编译Hadoop2.4.1:

mvn clean package -Pdist,native-win -DskipTests -Dtar
Run Code Online (Sandbox Code Playgroud)

有了JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51,它工作正常.

JAVA_HOME=C:\Program Files\Java\jdk1.8.0_05,它没有,并且没有给我以下错误:

[INFO] Apache Hadoop Annotations ......................... FAILURE [4.086s]
---
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8
.1:jar (module-javadocs) on project hadoop-annotations: MavenReportException: Er
ror while creating archive:
[ERROR] Exit code: 1 - C:\hadoop-src\hadoop-common-project\hadoop-annotations\sr
c\main\java\org\apache\hadoop\classification\InterfaceStability.java:27: error:
unexpected end tag: </ul>
[ERROR] * </ul>
[ERROR] ^
[ERROR]
[ERROR] Command line was: "C:\Program Files\Java\jdk1.8.0_05\jre\..\bin\javadoc.
exe" -J-Dhttp.proxySet=true -J-Dhttp.proxyHost=proxy -J-Dhttp.proxyPort=3128 @op
tions @packages
[ERROR]
[ERROR] Refer to the generated Javadoc files in 'C:\hadoop-src\hadoop-common-pro
ject\hadoop-annotations\target' dir.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionE
xception
[ERROR]
Run Code Online (Sandbox Code Playgroud)

如前所述,我没有改变JAVA_HOME.错误消息似乎表明该错误与代理有关,但我不知道为什么.

在这两种情况下,我都有

C:\hadoop-src>javac -version
javac 1.8.0_05
Run Code Online (Sandbox Code Playgroud)

C:\hadoop-src>java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)

你们有没有关于发生了什么的线索?

Mic*_*ess 21

作为Stuarts建议的替代方案(我很难找到放置附加参数的位置):为了完全跳过javadoc生成,只需运行

mvn clean package -Pdist,native-win -DskipTests -Dtar -Dmaven.javadoc.skip=true
Run Code Online (Sandbox Code Playgroud)


Stu*_*rks 10

这是javadoc报告的错误.Java 8中的javadoc版本比早期版本的版本严格得多.如果它检测到它认为是无效标记的内容,它现在发出错误信号,包括存在不期望的结束标记.

要在javadoc中关闭此检查,请将-Xdoclint:none标志添加到javadoc命令行.有关如何在maven环境中执行此操作的信息,请参阅Stephen Colebourne关于此主题的博客条目.具体来说,添加

<additionalparam>-Xdoclint:none</additionalparam>
Run Code Online (Sandbox Code Playgroud)

到适当的属性或配置文件.

不过,有几件奇怪的事情正在发生.此文件当前(主干)版本似乎</ul>在正确的位置具有结束标记.此文件历史记录表明最近添加了以前丢失的结束标记,但它确实出现在Hadoop 2.4中.此文件本身由JDK 8u5 javadoc成功处理,无需抑制任何错误.

是否已在某处添加了修补程序,添加了以前缺少的</ul>结束标记,由于结束标记已添加到原始源,因此现在是多余的?额外的结束标记将导致javadoc因此错误而失败.

UPDATE

我一直在看错了分支.该文件2.4.1版本显然有一个额外的</ul>结束标记.关于错误补丁的猜想是对的.主干上文件的历史记录表明,HADOOP-8059在2012年6月添加了一堆javadoc评论.这些新增内容缺少</ul>结束标记.2014年1月,HADOOP-10320添加了缺失的结束标记.将HADOOP-10320的贴片移植到2.4.1分支,但是HADOOP-8059的新javadocs没有被移植,导致标记格式错误.