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

Maven. Транзитивные зависимости

Мой проект P зависит от зависимости A, которая зависит от зависимости B. Мой файл pom.xml проекта включает A как зависимость, а его jar включен в путь класса P. Тем не менее, во время выполнения P возникает NoClassDefFoundError, что связано с отсутствием банок B.

Не следует ли Maven загружать эти зависимости автоматически?

4b9b3361

Ответ 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 вы все еще совершаете ошибки с зеленым голосом...