Мой проект P зависит от зависимости, который зависит от зависимости B. Файл pom.xml моего проекта включает как зависимость, и ее банка включена в путь к классу P. Однако существует a NoClassDefFoundError
брошенный во время выполнения P, который останавливает от пропавших без вести B банки.
Разве Знаток не должен был загружать эти зависимости автоматически?
Мой проект P зависит от зависимости A [с областью компиляции], которая зависит от зависимости B [с областью компиляции].
Если только B не является необязательной зависимостью от A, B должна быть зависимостью P с областью видимости "compile(*)" (см. таблицу Dependency Scope и прочитайте примечание) и, таким образом, должна быть доступна во время выполнения.
Однако во время выполнения P возникает ошибка NoClassDefFoundError, которая связана с отсутствием банок B.
Поскольку вы запускаете проект под Eclipse, путь к классам настроен для вас, поэтому я исключу ошибку на этом уровне. Остается случай с необязательной зависимостью.
PS: Очень полезным инструментом для исследования такого рода проблем является dependency:tree
.
Если эта зависимость A имеет область компиляции - конечно, она должна быть загружена и более того - сделана доступной в пути к классам проекта. Но если бы он предоставил область видимости, это было бы так, поскольку предоставленные deps не были бы упакованы вместе с приложением Maven.
Кстати, как вы работаете с этим проектом - неправильная работа может вызвать такие проблемы, и это очень хорошее предположение. Например - если вы используете плагин maven exec - maven правильно настроит путь к классам для вас, но в противном случае - вы должны настроить его самостоятельно (или создать банку с зависимостями с помощью плагина сборки ).