На самом деле это ошибка в обычном сканировании пути к классам (.enableAutoConfig
).
Ваш класс приложения покрыт сканированием, поэтому внутренние классы также видны: когда вы запускаете приложение из идеи, «управляемый» внутренний класс (созданный компилятором для new Managed() {...}
) обнаруживается и регистрируется как расширениечто также означает регистрацию в контексте контекста.Но guice не может создать экземпляр внутреннего класса и выдает ошибку.
Вы можете включить дополнительные диагностические сообщения с помощью .printLifecyclePhasesDetailed()
(в связке guice) и увидеть, что дополнительное расширение действительно появляется при запуске из идеи.
Скорее всего, когда вы запускаете приложение из maven, оно сначала встраивается в jar, а затем запускается.В этом случае сканирование classpath работает немного по-другому и не видит внутренние классы (внутри jar) .. поэтому все работает.
Обратите внимание , что вам не нужно создавать экземпляры изарегистрируйте управляемый объект (и другие общие объекты) вручную: вы можете просто объявить управляемый как отдельный класс , и guicey найдет его и правильно зарегистрирует (как в guice, так и в dropwizard).Это ожидаемый способ регистрации расширений , особенно вместе с проверкой пути к классам.