Maven не работает в Java 8, когда теги Javadoc являются неполными
поскольку я использую Maven, я смог построить и установить в своих локальных проектах репозитория неполные теги Javadoc (например, отсутствующий параметр).
однако, поскольку я перешел на Java 8 (1.8.0-ea-b90) Maven абсолютно строго относится к отсутствующим тегам документации и показывает мне множество ошибок Javadoc, связанных с проблемами Javadoc, когда я пытаюсь построить или установить проект, где Javadoc не является "идеальным". Некоторые из проектов, которые я пытаюсь скомпилировать и установить мой локальный репозиторий-это сторонние проекты, из которых у меня нет контроля. Таким образом, обходной путь просто исправить все Javadocs во всех этих проектах, похоже, не представляется возможным в моем сценарии.
Это небольшая часть вывода, который я вижу, когда я выполняю mvn clean package install в моем проекте:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.026s
[INFO] Finished at: Mon Apr 08 21:06:17 CEST 2013
[INFO] Final Memory: 27M/437M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9:jar (attach-javadocs) on project jpc: MavenReportException: Error while creating archive:
[ERROR] Exit code: 1 - /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:10: error: @param name not found
[ERROR] * @param terms the terms to assert
[ERROR] ^
[ERROR] /Users/sergioc/Documents/workspaces/heal/jpc/src/main/java/org/jpc/engine/prolog/PrologDatabase.java:11: warning: no description for @return
[ERROR] * @return
[ERROR] ^
плагин Javadoc Maven настроен следующим образом в моем POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
как я уже говорил, все работает нормально, если я вернусь в Java 7.
Может быть, это ошибка связано с Maven работает в Java 8?
Как я могу заставить его работать (т. е. быть в состоянии построить Javadoc проекта и установить его код в моем локальном репозитории) с Java 8?
Я тестировал как с Maven 3.0.3, так и с 3.0.5 в OSX.
обновление:
если я изменю конфигурацию плагина Javadoc с помощью <failOnError>false</failOnError> (спасибо Мартину):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
затем проект устанавливается в моем локальном репозитории. Однако javadoc JAR по-прежнему нет сгенерированный.
фрагмент вывода, который я вижу в консоли с этой новой конфигурацией:
[ERROR] MavenReportException: ошибка при создании архива: выход
код: 1 - /пользователи/....java: 18: предупреждение: нет @param ... Командная строка
было: / Library / Java / Home/bin / javadoc @options @packages
см. созданные файлы Javadoc в
'/Users / sergioc / Documents/workspaces / heal/minitoolbox / target/apidocs'
dir.
at
орг.апаш.знаток.плагин.документация Javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java: 5043)
на
орг.апаш.знаток.плагин.документация Javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.java: 1990)
на
орг.апаш.знаток.плагин.документация Javadoc.Джавадочжар.выполнить (JavadocJar.java: 181)
на
орг.апаш.знаток.плагин.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java: 101)
на
орг.апаш.знаток.жизненный цикл.внутренний.MojoExecutor.execute (MojoExecutor.java: 209)
на
орг.апаш.знаток.жизненный цикл.внутренний.MojoExecutor.execute (MojoExecutor.java:153)
на
орг.апаш.знаток.жизненный цикл.внутренний.MojoExecutor.execute (MojoExecutor.java:145)
на
орг.апаш.знаток.жизненный цикл.внутренний.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.Ява:84)
на
орг.апаш.знаток.жизненный цикл.внутренний.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.Ява:59)
на
орг.апаш.знаток.жизненный цикл.внутренний.LifecycleStarter.singleThreadedBuild (LifecycleStarter.java: 183)
на
орг.апаш.знаток.жизненный цикл.внутренний.LifecycleStarter.выполнить (LifecycleStarter.java: 161)
в орг.апаш.знаток.DefaultMaven.doExecute (DefaultMaven.java: 320) at
орг.апаш.знаток.DefaultMaven.выполнить (DefaultMaven.Ява:156) в
орг.апаш.знаток.кли.Мавенкли.execute(MavenCli.java:537) at
орг.апаш.знаток.кли.Мавенкли.домен (MavenCli.java: 196) at
орг.апаш.знаток.кли.Мавенкли.main (MavenCli.java: 141) at
солнце.отражать.NativeMethodAccessorImpl.invoke0 (собственный метод) at
солнце.отражать.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Ява:57)
на
солнце.отражать.Делегирование methodaccessorimpl.invoke (DelegatingMethodAccessorImpl.Ява:43)
на Яве.ленг.отражать.Метод.метод Invoke.Ява:491) в
орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.launchEnhanced (пусковая установка.java:290)
на
орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.запуска(Launcher.java: 230)
на
орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.mainWithExitCode (Launcher.java: 409)
на
орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.главная (пусковая установка.java: 352)
любой обходной путь о том, как построить источники, установить проект и создать javadoc JAR за один шаг, как это было при работе с Java 7?
17 ответов:
лучшим решением было бы исправить ошибки javadoc. Если по каким-то причинам это невозможно (т. е. автоматически сгенерированный исходный код), то вы можете отключить эту проверку.
DocLint-это новая функция в Java 8, который изложить следующим образом:
обеспечить средство для обнаружения ошибок в комментариях Javadoc в начале цикл развития и в пути который легко соединен назад к исходный код.
это включено по умолчанию, и будет выполняться много проверок перед созданием Javadocs. Вам нужно отключить для Java 8, как указано в этой теме. Вам нужно будет добавить это в конфигурацию maven:
<profiles> <profile> <id>java8-doclint-disabled</id> <activation> <jdk>[1.8,)</jdk> </activation> <properties> <javadoc.opts>-Xdoclint:none</javadoc.opts> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> <configuration> <additionalparam>${javadoc.opts}</additionalparam> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> <configuration> <reportPlugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>${javadoc.opts}</additionalparam> </configuration> </plugin> </reportPlugins> </configuration> </plugin> </plugins> </build>для Maven-javadoc-плагин 3.0.x: Заменить
<additionalparam>-Xdoclint:none</additionalparam>С
<doclint>none</doclint>
самый простой способ получить вещи, работающие как с java 8, так и с java 7, - использовать профиль в сборке:
<profiles> <profile> <id>doclint-java8-disable</id> <activation> <jdk>[1.8,)</jdk> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> </plugins> </build> </profile> </profiles>
вот самый краткий способ, который я знаю, чтобы игнорировать предупреждения doclint независимо от используемой версии java. Нет необходимости дублировать конфигурацию плагина в нескольких профилях с небольшими изменениями.
<profiles> <profile> <id>doclint-java8-disable</id> <activation> <jdk>[1.8,)</jdk> </activation> <properties> <javadoc.opts>-Xdoclint:none</javadoc.opts> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9.1</version> <executions> <execution> <id>attach-javadocs</id> <!-- The actual id should be apparent from maven output --> <configuration> <additionalparam>${javadoc.opts}</additionalparam> </configuration> </execution> </executions> </plugin> ... </plugins> </build>протестировано на oracle / open jdk 6, 7 и 8.
добавить в раздел глобальные свойства в файле pom:
<project> ... <properties> <additionalparam>-Xdoclint:none</additionalparam> </properties>общее решение, представленное здесь в других ответах (добавление этого свойства в разделе плагинов), по какой-то причине не сработало. Только установив его глобально, я мог бы успешно построить javadoc jar.
самое короткое решение, которое будет работать с любой версией Java:
<profiles> <profile> <id>disable-java8-doclint</id> <activation> <jdk>[1.8,)</jdk> </activation> <properties> <additionalparam>-Xdoclint:none</additionalparam> </properties> </profile> </profiles>просто добавьте это в свой ПОМ, и вы хорошо пойдете.
это в основном @Анкон-х плюс ответ@zapp.
для maven-javadoc-плагин 3.0.0 пользователей:
заменить
<additionalparam>-Xdoclint:none</additionalparam>by
<doclint>none</doclint>
переопределение
maven-javadoc-pluginтолько конфигурация, не устраняет проблему сmvn site(используется, например, на стадии выпуска). Вот что я должен был сделать:<profile> <id>doclint-java8-disable</id> <activation> <jdk>[1.8,)</jdk> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> <configuration> <reportPlugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> </reportPlugins> </configuration> </plugin> </plugins> </build> </profile>
Я не думаю, что просто выключение DocLint является хорошим решением, по крайней мере, не в долгосрочной перспективе. Хорошо, что Javadoc стал немного более строгим, поэтому правильный способ исправить проблему сборки -исправить основную проблему. Да, в конечном итоге вам нужно будет исправить эти файлы исходного кода.
вот вещи, чтобы высматривать, что вы могли бы ранее уйти с:
- искаженный HTML (например, отсутствующий конечный тег, не экранированные скобки, и т. д.)
- недействительным
{@link }s. (то же самое касается подобных тегов, таких как@see)- недействительным
@authorзначения. Это раньше принималось:@author John <[email protected]>но не так больше из-за не-экранированных скобок.- HTML таблицы в Javadoc теперь требуют резюме или заголовок. Смотрите этот вопрос для объяснения.
вам просто нужно исправить файлы исходного кода и продолжать строить свой Javadoc, пока он не сможет построить без сбоев. Громоздкий да, но лично мне нравится, когда я довел свои проекты до уровня DocLint, потому что это означает, что я могу быть более уверенным, что Javadoc, который я создаю, на самом деле то, что я намереваюсь.
конечно, есть проблема, если вы генерируете Javadoc на каком-то исходном коде, который вы не создали сами, например, потому что он исходит от какого-то генератора кода, например wsimport. Странно, что Oracle не подготовила свои собственные инструменты для соответствия JDK8 перед фактическим выпуском JDK8. Кажется это не будет исправлено до Java 9. Только в этом конкретном случае я предлагаю отключить DocLint, как описано в другом месте на этой странице.
вы можете попробовать установить
failOnErrorсвойство (см. плагин документации) кfalse:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> <configuration> <failOnError>false</failOnError> </configuration> </execution> </executions> </plugin>как вы можете видеть из документов, значение по умолчанию:
true.
поскольку это зависит от версии вашего JRE, которая используется для запуска команды maven, вы, вероятно, не хотите отключать
DocLintпо умолчанию в вашем pom.xmlотсюда, из командной строки вы можете использовать переключатель
-Dadditionalparam=-Xdoclint:none.пример:
mvn clean install -Dadditionalparam=-Xdoclint:none
имя свойства конфигурации было изменено в последней версии Maven-javadoc-plugin, которая является 3.0.0.
следовательно,
не будет работать. Поэтому мы должны изменить его, как показано ниже. <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.0.0</version> <configuration> <doclint>none</doclint> </configuration> </plugin>
начиная с Maven-javadoc-plugin 3.0.0 вы должны были использовать additionalJOption чтобы установить дополнительную опцию Javadoc, поэтому, если вы хотите, чтобы Javadoc отключил doclint, вы должны добавить следующее свойство.
<properties> ... <additionalJOption>-Xdoclint:none</additionalJOption> ... <properties>вы также должны упомянуть версию Maven-javadoc-plugin как 3.0.0 или выше.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.0.0</version> </plugin>
Я не уверен, что это поможет, но даже я столкнулся с той же самой проблемой совсем недавно с oozie-4.2.0 версия. После прочтения приведенных выше ответов я только что добавил опцию maven через командную строку, и это сработало для меня. Итак, просто делимся здесь.
Я использую java 1.8.0_77, не пробовал с java 1.7
bin/mkdistro.sh -DskipTests -Dmaven.документация Javadoc.opts=' - Xdoclint: - html'
ниже
JAVA_TOOL_OPTIONS= - DadditionalJOption= - Xdoclint: нет
в работу Дженкинса конфигурация > среда сборки > внедрение переменных среды в процесс сборки > свойства содержимого
решена моя проблема построения кода через Дженкинс Мэйвен : -)
Итак, сэкономьте себе несколько часов, которые я не делал, и попробуйте это, если это не работает:
<additionalJOption>-Xdoclint:none</additionalJOption>тег изменен для более новых версий.
Я хотел бы добавить некоторое представление о других ответах
в моем случае
-Xdoclint:нет
не работает.
давайте начнем с того, что в моем проекте мне вообще не нужен javadoc. Только некоторые необходимые плагины получили зависимость от времени сборки.
Итак, самый простой способ решить мою проблему:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin>
Я немного опоздал на вечеринку, но я был вынужден искать обходной путь тоже, оказался здесь, а затем нашел его.
вот что работает для меня:-
export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:noneа затем запустите сборку Maven, любую сборку дистрибутива Linux и т. д. Хорошая вещь об этом, что он не требует Maven config изменение файлов-я не мог этого сделать, так как моей целью было перестроить кучу Centos rpm пакеты, так что пришлось идти очень глубоко.
игнорировать отсутствует
@paramи@returnтеги, достаточно отключитьmissingdoclint group. Таким образом, javadoc по-прежнему будет проверяться на более высокий уровень и синтаксические проблемы:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.0.0</version> <configuration> <doclint>all,-missing</doclint> </configuration> </plugin>обратите внимание, что это за плагин версии 3.0 или новее.
Comments