Подтвердить что ты не робот

Невозможно построить Hadoop 2.4.1 с помощью Java8

Проблема довольно проста. Я пытаюсь скомпилировать 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)

У вас есть какие-то подсказки о том, что происходит?

4b9b3361

Ответ 1

Это ошибка, сообщенная javadoc. Версия javadoc в Java 8 значительно более строгая, чем версия в более ранней версии. Он теперь сигнализирует об ошибке, если обнаруживает, что он считает недопустимой разметкой, в том числе наличие конечного тега, где его не ожидалось.

Чтобы отключить эту проверку в javadoc, добавьте флаг -Xdoclint:none в командную строку javadoc. Для получения информации о том, как это сделать в среде maven, см. запись в блоге Стивена Колеборна на эту тему. В частности, добавьте

<additionalparam>-Xdoclint:none</additionalparam>

в соответствующие свойства или файл конфигурации.

Однако есть пара странных вещей. текущая (магистральная) версия этого файла, кажется, имеет тег </ul> end в нужном месте. История этого файла указывает, что ранее отсутствующий конечный тег был добавлен довольно недавно, но он, похоже, находится в Hadoop 2.4. И этот файл сам по себе успешно обрабатывается JDK 8u5 javadoc, без необходимости подавлять любые ошибки.

Был ли применен патч где-то, в котором добавлен тег ранее отсутствующего тега </ul>, который теперь лишний, поскольку конечный тег был добавлен к исходному источнику? Дополнительный тег конца вызовет ошибку javadoc с этой ошибкой.

UPDATE

Я искал неправильную ветку. 2.4.1 версия этого файла явно имеет дополнительный тег </ul> end. Мое предположение о ошибочном патче было правильным. История файла на багажнике показывает, что куча комментариев javadoc была добавлена ​​еще в июне 2012 года HADOOP-8059. В этих новых дополнениях отсутствовал конечный тег </ul>. В январе 2014 года HADOOP-10320 добавил отсутствующий тег конца. Патч для HADOOP-10320 был пересажен в ветвь 2.4.1, но новые javadocs из HADOOP-8059 не были пересажены, что привело к неправильной разметке.

Ответ 2

В качестве альтернативы предложению Стюартов (у меня было трудное время, чтобы выяснить, где поставить дополнительный парам): Чтобы вообще пропустить генерацию javadoc, просто запустите

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