Знаток. Переходные зависимости

Мой проект P зависит от зависимости, который зависит от зависимости B. Файл pom.xml моего проекта включает как зависимость, и ее банка включена в путь к классу P. Однако существует a NoClassDefFoundError брошенный во время выполнения P, который останавливает от пропавших без вести B банки.

Разве Знаток не должен был загружать эти зависимости автоматически?

33
задан isherwood 18 January 2015 в 01:06
поделиться

2 ответа

Мой проект P зависит от зависимости A [с областью компиляции], которая зависит от зависимости B [с областью компиляции].

Если только B не является необязательной зависимостью от A, B должна быть зависимостью P с областью видимости "compile(*)" (см. таблицу Dependency Scope и прочитайте примечание) и, таким образом, должна быть доступна во время выполнения.

Однако во время выполнения P возникает ошибка NoClassDefFoundError, которая связана с отсутствием банок B.

Поскольку вы запускаете проект под Eclipse, путь к классам настроен для вас, поэтому я исключу ошибку на этом уровне. Остается случай с необязательной зависимостью.

PS: Очень полезным инструментом для исследования такого рода проблем является dependency:tree.

23
ответ дан 27 November 2019 в 19:33
поделиться

Если эта зависимость A имеет область компиляции - конечно, она должна быть загружена и более того - сделана доступной в пути к классам проекта. Но если бы он предоставил область видимости, это было бы так, поскольку предоставленные deps не были бы упакованы вместе с приложением Maven.

Кстати, как вы работаете с этим проектом - неправильная работа может вызвать такие проблемы, и это очень хорошее предположение. Например - если вы используете плагин maven exec - maven правильно настроит путь к классам для вас, но в противном случае - вы должны настроить его самостоятельно (или создать банку с зависимостями с помощью плагина сборки ).

2
ответ дан 27 November 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: