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

Я изменил используемую версию maven-dependency-plugin с 2.8 на 2.10. Теперь, когда я запускаю mvn dependency:tree -Dverbose, я вижу следующее предупреждение:

[WARNING] Using Maven 2 dependency tree to get verbose output, which may be inconsistent with actual Maven 3 resolution

Версия Maven, которую я использую,

Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-14T18:37:52+01:00)
  • Могу ли я исправить это или избежать этого в любом случае?
  • Всегда ли Maven 2 использовался для вывода -Dverbose, но только сейчас они добавили предупреждение?

person wilx    schedule 02.04.2015    source источник
comment
Вы пытались воспроизвести его на более новом maven 3.2.5? Я не получил предупреждения о maven 3.2.5 и плагине зависимостей 2.10.   -  person andrii    schedule 02.04.2015


Ответы (1)


Объяснение вашей проблемы можно найти в официальной документации:

verbose Включать ли пропущенные узлы в сериализованное дерево зависимостей. Обратите внимание, что эта функция на самом деле использует алгоритм Maven 2 и может давать неверные результаты при использовании с Maven 3.

Взгляните на строку 245 TreeMojo.java для версии 2.10:

if ( verbose )
{
    // verbose mode force Maven 2 dependency tree component use
    if ( ! isMaven2x() )
    {
        getLog().warn( "Using Maven 2 dependency tree to get verbose output, "
                           + "which may be inconsistent with actual Maven 3 resolution" );
    }
    dependencyTreeString =
        serializeVerboseDependencyTree( dependencyTreeBuilder.buildDependencyTree( project,
                                                                                   localRepository,
                                                                                   artifactFilter ) );
}

Фактически он выводит предупреждение, если maven 2 не используется.

Теперь взгляните на строку 243 файла TreeMojo.java для версии 2.8:

if ( verbose )
{
    // verbose mode force Maven 2 dependency tree component use
    dependencyTreeString =
        serializeVerboseDependencyTree( dependencyTreeBuilder.buildDependencyTree( project,
                                                                                   localRepository,
                                                                                   artifactFilter ) );
}

Журнала предупреждений там не существует, поэтому:

Всегда ли Maven 2 использовался для вывода -Dverbose, но только сейчас они добавили предупреждение?

Да, предупреждение добавлено с версии 2.8.

Могу ли я исправить это или избежать этого в любом случае?

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

Однако, как видите, функциональность Maven 2 уже использовалась в версии 2.8. Надеюсь, вы избавитесь от него в более поздних версиях, когда они перенесут dependency:tree -Dverbose для использования функций maven 3.

person Magnilex    schedule 02.04.2015
comment
Пока они только полностью убрали поддержку -Dverbose. - person Meo; 14.06.2019
comment
Похоже, -Dverbose=true возвращается в проблемах maven-dependency-plugin 3.2.0 . apache.org/jira/browse/MDEP-644 - person Brad Cupit; 07.01.2021