Подтвердить что ты не робот

Maven-javadoc-plugin прерывает выпуск mvn: выполнить

Я пытаюсь выполнить mvn release:perform в трех проектах, которые я выпустил на наш сервер Nexus много раз в прошлом. Внезапно сегодня, без всякой видимой причины, все выпуски не выполняют цель org.apache.maven.plugins:maven-javadoc-plugin:2.10:jar (attach-javadocs).

При включении полного отслеживания стека и регистрации отладки (-e и -X) я вижу несколько сотен строк ошибок о недостающих пакетах:

...    
package org.apache.http does not exist
package org.slf4j does not exist
package org.joda.time does not exist
...

Однако все эти пакеты находятся как в моем локальном репозитории, так и в сервере Nexus. Более того, я не получаю ни одной из этих ошибок от mvn clean install, и все проекты (веб-приложения Java) фактически запускаются из Intellij без проблем, поэтому я действительно не пропускаю сотни пакетов.

Что может помешать mvn release:perform найти эти пакеты, если mvn clean install и mvn release:prepare не имеют проблем?

4b9b3361

Ответ 1

Кажется, существует каскад проблем, связанных с обновлением до maven-javadoc-plugin. См. http://jira.codehaus.org/browse/MJAVADOC-408.

Я вижу некоторую выгоду, когда mvn использует последние версии "встроенных" плагинов, если не указано иное (по сравнению с "закрепленной версией" для данной версии Maven), но это означает, что поддерживающие плагины обязаны выполнять регрессионное тестирование по каждой версии Maven при выпуске плагина. Возможно, что-то пропустили.

Одним из способов было бы явно указать предыдущую версию maven-javadoc-plugin в вашей организации super POM или, альтернативно, проект POM, если вы не можете быстро сменить супер POM:

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
    </plugin>
  </plugins>
</pluginManagement>

Наша установка CI (Jenkins) сегодня столкнулась с той же проблемой. Надеемся, что новый maven-javadoc-plugin получит толчок с обновленным деревом зависимостей (если это действительно проблема). FWIW, мы были на 3.0.5 (ya, грустно по разным причинам).

Обновление 2014-09-24

Весь этот hubub, по-видимому, возник в ответ maven-javadoc-plugin сопровождающих еще не закрытая проблема в java-1.8.0-openjdk в MJAVADOC-398. Я понятия не имею, почему кто-то выпустил бы разбитую рабочую среду для неразрешенного дефекта проекта ниже по течению.

Обновление 2014-10-02

MJAVADOC-406 был разрешен, и есть версия 2.10.1 maven-javadoc-plugin, доступная в Maven Central, и, вероятно, многие хранилища рядом с вами,

Построить с непривязанной версией плагина javadoc теперь должно быть нормально.

Мораль истории

Maven-folk, вы были предупреждены. Блокируйте свои зависимостей подключаемого модуля, потому что они могут быть изгоями.

PS, MJAVADOC-408 был закрыт как дубликат MJAVADOC-407.

Ответ 2

Еще один способ устранить эту проблему - добавить следующее свойство:

...
<properties>
<maven.javadoc.failOnError>false</maven.javadoc.failOnError>
...
</properties>

в вашем pom.xml

Ответ 3

Пакет release

mvn по умолчанию использует специальный профиль. Этот профиль по умолчанию включает некоторые конфигурации плагинов по умолчанию (например, автоматически присоединить-javadocs как часть сборки).

Это причина, по которой ваша сборка не работает только на mvn release:perform, а не на mvn clean install.

Если вы хотите лучше управлять тем, какая конфигурация будет использоваться (например, если вы не хотите javadocs или хотите предоставить свою собственную конфигурацию для javadocs), вы можете попробовать отключить этот профиль по умолчанию добавив конфигурацию: <useReleaseProfile>false</useReleaseProfile>

или в командной строке: mvn release:perform -DuseReleaseProfile=false

Дополнительная информация здесь: http://maven.apache.org/maven-release/maven-release-plugin/perform-mojo.html#useReleaseProfile

Ответ 4

У меня только что был сбой с предыдущей работой с плагином Javadoc 2.9.1.

В моем случае это было потому, что я переключился на Java 8 с 7, а инструмент javadoc в 8, по-видимому, стал более строгим с его проверками. У меня был сломанный {@link ...} в моем коде, который пропустил инструмент из 7.

Ответ 5

Если генерация javadocs не требуется, просто добавьте свойство skip:

<properties>
    <maven.javadoc.skip>true</maven.javadoc.skip>
</properties>

Ответ 6

У меня есть версия 2.8 и

<maven.javadoc.failOnError>false</maven.javadoc.failOnError>

работы