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 ... Командная строка был: / библиотека / Java / Главная / bin / javadoc @options @packages

см. сгенерированные файлы Javadoc в '/Пользователи / sergioc / документы / рабочие пространства / исцеление / minitoolbox / target/apidocs' dir.

at орг.апаш.знаток.плагин.документация Javadoc.AbstractJavadocMojo.executeJavadocCommandLine (AbstractJavadocMojo.java: 5043) на орг.апаш.знаток.плагин.документация Javadoc.AbstractJavadocMojo.executeReport (AbstractJavadocMojo.java: 1990) на орг.апаш.знаток.плагин.документация Javadoc.JavadocJar.execute (JavadocJar.java: 181) на орг.апаш.знаток.плагин.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java: 101) на орг.апаш.знаток.жизненный цикл.внутренний.MojoExecutor.выполнить (MojoExecutor.java: 209) на орг.апаш.знаток.жизненный цикл.внутренний.MojoExecutor.выполнить (MojoExecutor.java: 153) на орг.апаш.знаток.жизненный цикл.внутренний.MojoExecutor.выполнить (MojoExecutor.java: 145) на орг.апаш.знаток.жизненный цикл.внутренний.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java: 84) на орг.апаш.знаток.жизненный цикл.внутренний.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.Ява:59) на орг.апаш.знаток.жизненный цикл.внутренний.LifecycleStarter.singleThreadedBuild (LifecycleStarter.java: 183) на орг.апаш.знаток.жизненный цикл.внутренний.LifecycleStarter.выполнить (LifecycleStarter.java: 161) в орг.апаш.знаток.Дефолтмавен.doExecute (DefaultMaven.java: 320) at орг.апаш.знаток.Дефолтмавен.execute (DefaultMaven.java: 156) at орг.апаш.знаток.кли.Мавенкли.execute (MavenCli.java:537) at орг.апаш.знаток.кли.Мавенкли.домен (MavenCli.java: 196) at орг.апаш.знаток.кли.Мавенкли.main (MavenCli.java: 141) at солнце.отражать.NativeMethodAccessorImpl.invoke0 (собственный метод) at солнце.отражать.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 57) на солнце.отражать.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 43) на Яве.ленг.отражать.Метод.метод Invoke.java: 491) at орг.codehaus.сплетение.classworlds.пусковая установка.Пусковая установка.launchEnhanced (пусковая установка.java: 290) на орг.codehaus.сплетение.classworlds.пусковая установка.Пусковая установка.запуска(Launcher.java: 230) на орг.codehaus.сплетение.classworlds.пусковая установка.Пусковая установка.mainWithExitCode (Launcher.java: 409) на орг.codehaus.сплетение.classworlds.пусковая установка.Пусковая установка.main (Launcher.java: 352)

любое обходное решение о том, как построить источники, установить проект и создать банку Javadoc за один шаг, как это работало с 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.


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

<profiles>
    <profile>
        <id>disable-java8-doclint</id>
        <activation>
            <jdk>[1.8,)</jdk>
        </activation>
        <properties>
            <additionalparam>-Xdoclint:none</additionalparam>
        </properties>
    </profile>
</profiles>

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

это в основном @Анкон-х плюс @Зепп.


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

заменить

<additionalparam>-Xdoclint:none</additionalparam>

by

<doclint>none</doclint>


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

<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 <john.doe@mine.com> но не из-за неэкранированных скобки.
  • 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: нет

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

решил мою проблему построения кода через Дженкинса Maven : -)


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

 <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 теги, достаточно отключить missing doclint 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 или новее.