无法使用Java8构建Hadoop 2.4.1

时间:2014-07-07 16:37:28

标签: maven hadoop java-8

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

mvn clean package -Pdist,native-win -DskipTests -Dtar

使用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]

如前所述,除了JAVA_HOME之外我没有改变任何其他内容。错误消息似乎表明该错误与代理有关,但我不知道为什么。

在这两种情况下,我都有

C:\hadoop-src>javac -version
javac 1.8.0_05

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)

你们有没有关于进展情况的线索?

2 个答案:

答案 0 :(得分:21)

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

mvn clean package -Pdist,native-win -DskipTests -Dtar -Dmaven.javadoc.skip=true

答案 1 :(得分:10)

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

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

<additionalparam>-Xdoclint:none</additionalparam>

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

但是,有一些奇怪的事情正在发生。 current (trunk) version of this file似乎在正确的位置有</ul>结束标记。 history of this file表示最近添加了以前丢失的结束标记,但它确实出现在Hadoop 2.4中。此文件本身由JDK 8u5 javadoc成功处理,无需抑制任何错误。

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

<强>更新

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