Так как я использую 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 по-прежнему не генерируется.
Фрагмент вывода, который я вижу в консоли с этой новой конфигурацией:
[ОШИБКА] MavenReportException: ошибка при создании архива: код выхода: 1 - /Users/....java:18: предупреждение: нет @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: jojojjjjj0) .javadoc.JavadocJar.execute (JavadocJar.java:181) в org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:101) в org.apache.maven.lifejo.jec.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.LifecycleStarter.execute (LifecycleStarter.java). в 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.lanfre.вызвать (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 , которая представлена в виде:
Это включено по умолчанию, и перед генерацией Javadocs будет выполнено множество проверок. Вы должны отключить это для Java 8, как указано в этой теме . Вам придется добавить это в вашу конфигурацию maven:
Для maven-javadoc-plugin 3.0.0+: заменить
с участием
источник
javadoc
это не знает эту опцию.<doclint>none</doclint>
. См. Maven.apache.org/plugins/maven-javadoc-plugin/…<additionalparam/>
заменен на<additionalOptions/>
. См. Issues.apache.org/jira/browse/MJAVADOC-475Самый простой подход к работе с java 8 и java 7 - использовать профиль в сборке:
источник
Вот самый краткий способ, которым я знаю, игнорировать предупреждения doclint независимо от используемой версии java. Нет необходимости дублировать конфигурацию плагина в нескольких профилях с небольшими изменениями.
Проверено на Oracle / Open JDK 6, 7, 8 и 11.
источник
build
иprofiles
являются блоками верхнего уровня в mavenpom.xml
. maven.apache.org/pom.html#Build .Добавьте в раздел глобальных свойств в файле pom:
Общее решение, представленное здесь в других ответах (добавление этого свойства в разделе плагинов), по какой-то причине не сработало. Только установив его глобально, я смог бы успешно построить javadoc jar.
источник
Самое короткое решение, которое будет работать с любой версией Java:
Просто добавьте это в свой POM, и все готово.
Это в основном ответ @ ankon плюс ответ @ zapp .
Для пользователей maven-javadoc-plugin 3.0.0:
замещать
<additionalparam>-Xdoclint:none</additionalparam>
по
<doclint>none</doclint>
источник
<additionalJOption>-Xdoclint:none</additionalJOption>
или<doclint>none</doclint>
присвоить свой объект<properties>
<doclint>none</doclint>
(без активации на основе версии JDK), все равно произойдет ли сбой на JDK менее 1.8, или maven-javadoc-plugin автоматически обнаружит,doclint
опция поддерживается текущей версией Java?Я не думаю, что просто отключение DocLint является хорошим решением, по крайней мере, на длительный срок. Хорошо, что Javadoc стал немного более строгим, поэтому правильный способ решить проблему сборки - это исправить основную проблему . Да, в конечном итоге вам нужно будет исправить эти файлы исходного кода.
Вот вещи, на которые стоит обратить внимание:
{@link }
с. (то же самое касается аналогичных тегов, таких как@see
)@author
значения. Раньше это принималось:@author John <john.doe@mine.com>
но уже не так из-за неэкранированных скобок.Вам просто нужно будет исправить файлы исходного кода и продолжать собирать Javadoc, пока он не сможет работать без сбоев. Громоздко да, но лично мне нравится, когда я довел свои проекты до уровня DocLint, потому что это означает, что я могу быть более уверен в том, что Javadoc, который я создаю, на самом деле является тем, что я намереваюсь.
Конечно, есть проблема, если вы генерируете Javadoc для некоторого исходного кода, который вы не создали самостоятельно, например, потому что он исходит из какого-то генератора кода, например, wsimport . Странно, что Oracle не подготовил свои собственные инструменты для соответствия JDK8 до фактического выпуска JDK8. Кажется, это не будет исправлено до Java 9 . Только в этом конкретном случае я предлагаю отключить DocLint, как описано в другом месте на этой странице.
источник
wsimport
чтобы стать частью Javadoc.maven-javadoc-plugin
Только переопределение конфигурации, не устраняет проблемуmvn site
(используется, например, на этапе выпуска). Вот что я должен был сделать:источник
maven-javadoc-plugin
через<reportPlugins>
секцииmaven-site-plugin
является не рекомендуется для последних версий Maven 3.Вы можете попробовать установить
failOnError
свойство (см. Документацию плагина ) кfalse
:Как вы можете видеть из документов, значение по умолчанию -
true
.источник
Поскольку это зависит от версии вашего JRE, которая используется для запуска команды maven, вы, вероятно, не хотите отключать ее
DocLint
по умолчанию в вашем pom.xml.Следовательно, из командной строки вы можете использовать переключатель
-Dadditionalparam=-Xdoclint:none
.Пример:
mvn clean install -Dadditionalparam=-Xdoclint:none
источник
-Dadditionalparam=-Xdoclint:none
и все ваши сборки будут работать с Java 8.mvn org.apache.maven.plugins:maven-javadoc-plugin:3.1.0:jar -DadditionalJOption=-Xdoclint:none
- у меня это сработалоИмя свойства конфигурации было изменено в последней версии maven-javadoc-plugin, которая является 3.0.0.
Следовательно, <extraparam> не будет работать. Поэтому мы должны изменить его, как показано ниже.
источник
doclint
Документацию здесь: maven.apache.org/plugins/maven-javadoc-plugin/…pom.xml
каталог проекта src / build. В моем случае все, что мне нужно было сделать, это найти,maven-javadoc-plugin
а затем перейти к<configuration></configuration>
уже существующему блоку и добавить<doclint>none</doclint>
. Как только все это когда-то станет известно, контекст здесь заключается в том, что я пытаюсь исправить другую ошибку в OpenGrok и никогда раньше не использовал Maven и не хочу повторяться в другом подпроекте, просто чтобы понять как применять быстрые исправления.Я хотел бы добавить понимание других ответов
В моем случае
Не сработало
Начнем с того, что в моем проекте мне вообще не нужен был Javadoc. Только некоторые необходимые плагины получили зависимость от времени сборки.
Итак, самый простой способ решить мою проблему:
источник
По Maven-Javadoc-плагин 3.0.0 вы должны были с помощью additionalJOption установить дополнительную опцию Javadoc, так что если вы хотите , чтобы отключить Javadoc doclint, необходимо добавить следующее свойство.
Вы должны также упомянуть версию maven-javadoc-plugin как 3.0.0 или выше.
источник
Итак, сэкономьте несколько часов, которые я не делал, и попробуйте это, если кажется, что это не работает:
Тег изменен для более новых версий.
источник
-Xdoclint
само по себе недостаточно, но нужны дополнительные аргументы. Более новые версииmaven-javadoc-plugin
предусматриваютadditionalJOptions
это, старые не делают. Обходной путь:<additionalJOption>"-Xdoclint:none" "--allow-script-in-comments"</additionalJOption>
кавычки важны, иначе плагин добавляет их и предполагает только один аргумент вместо двух, что приводит кwrong args
ошибкам.javadoc: error - Illegal package name: ""-Xdoclint:none" "--allow-script-in-comments""
внешние кавычки добавляются оператором регистрации и не отображаются в оболочке. Я предполагаю, что проблема заключается в том, что в Windowsjavadoc
выполняетсяcmd.exe
, который анализирует одну большую строку как командную строку и разбиваетadditionalJOption
как задумано. В Linux аргументы передаются индивидуально процессу напрямую иadditionalJOption
передаются как один аргумент, что приводит к ошибке.Process Monitor
,cmd.exe
не используется. Скорее всего, Java просто строит одну большую командную строку и передает ееCreateProcess
, чтобы она анализировалась Windows, как и предполагалось: расщепление аргументов в пробелах с учетом кавычек.Добавлено ниже
В работу Дженкинс:
Конфигурация> Среда сборки> Внедрить переменные среды в процесс сборки> Свойства Содержимое
Решил мою проблему построения кода через Jenkins Maven :-)
источник
mvn release:perform
синтаксисом должно бытьmvn release:perform -Darguments="-Dmaven.javadoc.skip=true"
.Я не уверен, поможет ли это, но даже недавно я столкнулся с точно такой же проблемой с версией oozie-4.2.0 . Прочитав вышеупомянутые ответы, я только что добавил опцию maven через командную строку, и она сработала для меня. Итак, просто делюсь здесь.
Я использую Java 1.8.0_77 , не пробовал с Java 1.7
bin / mkdistro.sh -DskipTests -Dmaven.javadoc.opts = '- Xdoclint: -html'
источник
Для того, чтобы игнорировать отсутствующие
@param
и@return
теги, этого достаточно , чтобы отключитьmissing
группу doclint . Таким образом, Javadoc будет по-прежнему проверяться на наличие проблем более высокого уровня и синтаксиса:Обратите внимание, что это для плагина версии 3.0 или новее.
источник
Я немного опоздал на вечеринку, но я был вынужден искать обходной путь, оказался здесь, а затем нашел его.
Вот что работает для меня:
А затем запустите сборку Maven, любую сборку дистрибутива Linux и т. Д. Приятно то, что для этого не требуется изменение конфигурационных файлов Maven - я не мог этого сделать, поскольку моей целью было перестроить кучу rpm-пакетов Centos , поэтому пришлось идти очень глубоко.
источник