У меня странное поведение в моем проекте с использованием Spring. У меня есть эта структура:
Main-Spring-Project
|_Depends on Library A
|_Depends on Library B
Теперь... в компоненте A есть @Autowired, который внедряет компонент, находящийся в B. Когда у меня открыты все 3 проекта в моей среде разработки и я запускаю основной проект, все работает нормально. Но если я удалю проект A и оставлю B, все вылетает, когда я начинаю говорить:
Field factory in [class in A] required a bean of type '[class in B]' that could not be found.
так что... я подозреваю, что он загружает A, прежде чем B. Чего я не понимаю, так это почему он работает отлично, если у меня открыты оба проекта, и почему он падает, когда у меня закрыт A (основной проект использует свой JAR)
Кстати... если я удалю A и B, все снова будет работать идеально.
Убедитесь, что все они находятся под @ComponentScan
Они есть... и если бы их не было, это бы не работало и с исходными проектами




Нет Spring не ошибается при загрузке контекста.
Такое поведение имеет смысл: класс просто недоступен во время выполнения.
Здесь вы работаете со снимком/текущим исходным кодом разработки/скомпилированными классами библиотеки B, поскольку библиотека B является частью вашего текущего кода разработки.
Это означает, что зависимости/классы библиотеки B, необходимые во время запуска приложения, зависят не от Maven для их извлечения, а от того, к чему имеет доступ ваша IDE: проекты библиотек A и B.
Чтобы избежать этого, вы должны install (mvn clean install) зависимость B в вашем локальном репозитории Maven/Gradle, но это может быть нецелесообразно, если вам нужно повторять задачу 20 дней в день, потому что исходный код B меняется 20 дней в день.
Обратите внимание, что если вы не использовали свою IDE, вы были бы ограничены в установке зависимости при каждой модификации. Так что, наконец, все не так уж и плохо. Нет ?
После удаления проекта A попробуйте выполнить чистую сборку проекта (основного), а затем развернуть. Это может быть из-за старых ссылок.