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?

878   17  

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

    Ничего не найдено.