Maven. Транзитивные зависимости
Мой проект P зависит от зависимости A, которая зависит от зависимости B. Мой файл pom.xml проекта включает A как зависимость, а его jar включен в путь класса P. Тем не менее, во время выполнения P возникает NoClassDefFoundError
, что связано с отсутствием банок B.
Не следует ли Maven загружать эти зависимости автоматически?
Ответы
Ответ 1
Мой проект P зависит от зависимости A [с областью компиляции], которая зависит от зависимости B [с областью компиляции].
Если B не является опциональной зависимостью от A, B должна быть зависимость P от области "compile (*)" (см. таблицу Область зависимостей и прочитать примечание), и поэтому она должна быть доступна во время выполнения.
Тем не менее, во время выполнения P возникает NoClassDefFoundError, что связано с отсутствием банок B.
Поскольку вы запускаете проект под Eclipse, путь к нему настроен для вас, поэтому я исключу ошибку на этом уровне. Это оставляет нам случай дополнительной зависимости.
PS: Очень полезным инструментом для исследования этой проблемы является dependency:tree
.
Ответ 2
Если эта зависимость A имеет область скомпилировать - она должна быть загружена и более переделана в пути к классам проекта. Но если бы это имело предоставленное область видимости, так как предоставленные депиляции не были бы упакованы с приложением Maven.
Кстати, как вы выполняете этот проект - не работает должным образом, это может вызвать такие проблемы, и это очень хорошее предположение. Например, если вы используете maven плагин exec - maven будет правильно настроить путь к классам, но в противном случае - вы должны настроить его самостоятельно ( или создать банку с зависимостями с сборкой плагина).
Ответ 3
В моем случае я забыл запустить Eclipse с параметром -vm, который должен указывать на jdk/javaw.exe.
Даже после 5 лет программирования Java EE вы все еще совершаете ошибки с зеленым голосом...