Maven не работает на Java 8, когда tags Javadoc являются неполными

Поскольку я использую Maven, мне удалось создать и установить в моих проектах локального репозитория, которые имеют неполные tags 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:

  org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar     

Как я уже говорил, все работает нормально, если я вернусь к Java 7. Возможно, это ошибка, связанная с Maven, работающая на Java 8? Как я могу заставить его работать (т. Е. Иметь возможность создавать Javadoc проекта и устанавливать его код в моем локальном репозитории) с помощью Java 8? Я тестировал с Maven 3.0.3 и 3.0.5 в OSX.

ОБНОВИТЬ:

Если я изменю конфигурацию плагина Javadoc с помощью false (спасибо Martin):

  org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar     

Затем проект устанавливается в моем локальном репозитории. Однако JAR Javadoc все еще не генерируется.

Фрагмент вывода, который я вижу на консоли с этой новой конфигурацией, это:

[ERROR] MavenReportException: Ошибка при создании архива: Код выхода: 1 – /Users/….java:18: warning: no @param … Командная строка: / Library / Java / Home / bin / javadoc @options @packages

Обратитесь к сгенерированным файлам Javadoc в директории / Users / sergioc / Documents / workspaces / heal / minitoolbox / target / apidocs.

на org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java:5043) на org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.java:1990) на org.apache.maven.plugin .javadoc.JavadocJar.execute (JavadocJar.java:181) в org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java : 209) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:153) в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:145) в org.apache. maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:84) в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:59) в org.apache.maven.lifecycle.internal.LifecycleStarter. singleThreadedBuild (LifecycleStarter.java:183) на org.apache.maven.lifecycle.internal.Lifecyc leStarter.execute (LifecycleStarter.java:161) на org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:320) на org.apache.maven.DefaultMaven.execute (DefaultMaven.java:156) на org.apache.maven .cli.MavenCli.execute (MavenCli.java:537) на org.apache.maven.cli.MavenCli.doMain (MavenCli.java:196) на org.apache.maven.cli.MavenCli.main (MavenCli.java:141 ) на sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect. Method.invoke (Method.java:491) в org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:290) в org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java: 230) в org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) в org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352)

Любое обходное решение о том, как создавать источники, устанавливать проект и генерировать Javadoc JAR за один шаг, поскольку он работал с Java 7?

Лучшим решением было бы исправить ошибки javadoc. Если по какой-то причине это невозможно (то есть: автоматически сгенерированный исходный код), вы можете отключить эту проверку.

DocLint – это новая функция Java 8 , которая суммируется как:

Предоставьте средства для обнаружения ошибок в комментариях Javadoc на раннем этапе цикла разработки и таким образом, чтобы их можно было легко связать с исходным кодом.

Это включено по умолчанию и будет запускать много проверок перед генерацией Javadocs. Вам нужно отключить это для Java 8, как указано в этом streamе . Вы должны добавить это в свою конфигурацию maven:

   java8-doclint-disabled  [1.8,)   -Xdoclint:none       org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar   ${javadoc.opts}      org.apache.maven.plugins maven-site-plugin 3.3    org.apache.maven.plugins maven-javadoc-plugin  ${javadoc.opts}        

Самый простой способ получить работу с java 8 и java 7 – это использовать профиль в сборке:

   doclint-java8-disable  [1.8,)     org.apache.maven.plugins maven-javadoc-plugin  -Xdoclint:none       

Вот наиболее краткий путь, который я знаю, чтобы игнорировать предупреждения doclint независимо от используемой версии Java. Нет необходимости дублировать конфигурацию плагина в нескольких профилях с небольшими изменениями.

   doclint-java8-disable  [1.8,)   -Xdoclint:none       org.apache.maven.plugins maven-javadoc-plugin 2.9.1   attach-javadocs   ${javadoc.opts}     ...   

Протестировано на oracle / open jdk 6, 7 и 8.

Добавьте в раздел глобальных свойств файла pom:

  ...  -Xdoclint:none  

Общее решение, представленное здесь в других ответах (добавив, что свойство в разделе плагинов) по какой-то причине не работает. Только установив его во всем мире, я мог бы успешно создать javadoc jar.

Самое короткое решение, которое будет работать с любой версией Java:

   disable-java8-doclint  [1.8,)   -Xdoclint:none    

Просто добавьте это в свой POM, и вам хорошо идти.

Это в основном ответ @ ankon плюс ответ @ zapp .


Для пользователей maven-javadoc-plugin 3.0.0:

замещать

-Xdoclint:none

от

none

Переопределение только конфигурации maven-javadoc-plugin не устраняет проблему с mvn site (например, на этапе релиза). Вот что я должен был сделать:

  doclint-java8-disable  [1.8,)     org.apache.maven.plugins maven-javadoc-plugin  -Xdoclint:none    org.apache.maven.plugins maven-site-plugin 3.3    org.apache.maven.plugins maven-javadoc-plugin  -Xdoclint:none         

Я не думаю, что просто отключить DocLint – это хорошее решение, по крайней мере, на длительный срок. Хорошо, что Javadoc стал немного более строгим, поэтому правильным решением проблемы сборки является устранение основной проблемы . Да, вам в конечном итоге нужно будет исправить эти файлы исходного кода.

Вот то, что нужно, чтобы вы могли с этим справиться:

  • Malformed HTML (например, отсутствующий конечный тег, неэкранированные скобки и т. Д.)
  • Недопустимый {@link } s. (то же самое касается похожих тегов, таких как @see )
  • Недопустимые значения @author . Раньше это принималось: @author John но не так больше из-за неэкранированных скобок.
  • В таблицах HTML в Javadoc теперь требуется сводка или подпись. См. Этот вопрос для объяснения.

Вам просто нужно исправить файлы исходного кода и продолжать строить свой Javadoc, пока он не сможет построить без сбоя. Громоздко да, но лично мне нравится, когда я доставлял свои проекты до уровня DocLint, потому что это означает, что я могу быть более уверенным в том, что Javadoc I производит на самом деле то, что я намерен.

Конечно, проблема состоит в том, что вы генерируете Javadoc на каком-то исходном коде, который вы не создали сами, например, потому что он исходит из некоторого генератора кода, например, wsimport . Странно, что Oracle не подготовил свои собственные инструменты для соответствия JDK8, прежде чем фактически выпустил JDK8. Кажется, он не будет исправлен до Java 9 . Только в этом конкретном случае я предлагаю отключить DocLint, как описано в другом месте на этой странице.

Вы можете попробовать установить свойство failOnError (см. Документацию плагина ) на значение false :

  org.apache.maven.plugins maven-javadoc-plugin 2.9   attach-javadocs  jar   false     

Как видно из документов, значение по умолчанию равно true .

Поскольку это зависит от версии вашей JRE, которая используется для запуска команды maven, которую вы, возможно, не хотите отключать DocLint по умолчанию в вашем pom.xml

Следовательно, из командной строки вы можете использовать переключатель -Dadditionalparam=-Xdoclint:none .

Пример: mvn clean install -Dadditionalparam=-Xdoclint:none

Имя свойства конфигурации было изменено в последней версии maven-javadoc-plugin, которая равна 3.0.0.

Следовательно, <дополнительныйпарам> не будет работать. Поэтому мы должны изменить его, как показано ниже.

   org.apache.maven.plugins maven-javadoc-plugin 3.0.0  none   

Я не уверен, что это поможет, но даже я столкнулся с той же проблемой совсем недавно с версией oozie-4.2.0 . Прочитав приведенные выше ответы, я только что добавил параметр maven через командную строку, и это сработало для меня. Итак, просто поделитесь здесь.

Я использую java 1.8.0_77 , не пробовал с java 1.7

bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts = ‘- Xdoclint: -html’

Начиная с maven-javadoc-plugin 3.0.0 вы должны использовать addJOption для установки дополнительной опции Javadoc, поэтому, если вы хотите, чтобы Javadoc отключил doclint, вы должны добавить следующее свойство.

  ... -Xdoclint:none ...  

Вы также должны указать версию maven-javadoc-plugin как 3.0.0 или выше.

  org.apache.maven.plugins maven-javadoc-plugin 3.0.0  

Я хотел бы добавить некоторое понимание других ответов

В моем случае

не -Xdoclint: нет

Не работает.

Начнем с того, что в моем проекте мне совсем не нужен javadoc. Только некоторые необходимые плагины получили зависимость от времени сборки.

Итак, самый простой способ решить мою проблему:

  org.apache.maven.plugins maven-javadoc-plugin  true   

Я немного опаздываю на вечеринку, но я тоже был вынужден искать обходной путь, оказался здесь, а потом нашел его.

Вот что работает для меня:

 export JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none 

И затем запустите свою сборку Maven, любую сборку дистрибутива Linux и т. Д. Приятно, что для нее не требуется модификация файлов Maven – я не мог этого сделать, поскольку моя задача состояла в том, чтобы перестроить пакет пакетов Centos rpm, поэтому пришлось Идите очень глубоко.

Добавлено ниже

не JAVA_TOOL_OPTIONS = -DadditionalJOption = -Xdoclint: нет

в конфигурацию заданий Дженкинса> Среда сборки> Внедрить переменные среды в процесс сборки> Свойства Содержимое

Решила мою проблему создания кода через Jenkins Maven 🙂

Чтобы игнорировать отсутствующие @param и @return , достаточно отключить missing группу doclint . Таким образом, javadoc по-прежнему будет проверяться на проблемы с более высоким уровнем и синтаксисом:

   org.apache.maven.plugins maven-javadoc-plugin 3.0.0  all,-missing   

Обратите внимание, что это для плагина версии 3.0 или новее.

Итак, спасите себя несколько часов, которых я не сделал, и попробуйте, если это не сработает:

  -Xdoclint:none 

Тег изменен для более новых версий.

Interesting Posts

Узнать, какая программа выведет окно командной строки

Точность десятичного деления T-SQL

Совместное использование папки с Win 2k3 – разрешает только localhost

Добавление таблицы в существующий PDF на той же странице – ITEXT

Автоматический вход в Vodafone Community WiFi (Fon) через скрипт Unix

Можно ли повторять прокрутку вперед через foreach?

Сохранение пользовательского classа Swift с помощью NSCoding для UserDefaults

Как шифровать E-Mail с S / MIME

Как работать с URISyntaxException

Когда возвращался результат потребления StdinLock, почему заем в stdin сохранялся?

Как открыть свойство коллекции?

Повысить приоритет загрузки для определенных частей файла в клиенте BitTorrent?

HTML5 Audio не может воспроизводиться через Javascript, если только вручную его не запускать вручную

Как работают servlets? Создание, сеансы, общие переменные и multithreading

Процесс не может получить доступ к файлу, поскольку он используется другим процессом

Давайте будем гением компьютера.