Давайте обсудим результаты.
Меньше всех набрал
Guice. ИМХО, эту библиотеку теперь уже просто мало кто использует, потому что почти везде Spring или Java EE, где есть свой dependency injection. Вообще я не очень большой любитель dependency injection через аннотации. Не понимаю, почему нельзя просто использовать статические методы, которые возвращают сервисы. Скажем, есть сервис XYZService и у него есть реализация XYZServiceImpl. Тогда я просто вызывают метод XYZService.get(), который возвращает мне инстанс XYZServiceImpl. Вот и весь dependency injection. Причём работает такой подход всегда, не только в контексте фреймворка.
Xerces. Это одна из тех магических библиотек, которые по-моему никто никогда не использует напрямую, но она присутствует почти в любом проекте. Очень часто она вызывает конфликты в зависимостях и странные ошибки в рантайме вроде NoClassDefFoundError.
Вопрос на SO про "Xerces Hell" набрал 739 лайков. Масла в огонь подливает ещё тот факт, что Xerces также присутствует в самом JDK во внутреннем пакете
com.sun.org.apache.xerces.internal.jaxp
. Посмотрите в свой проект. Если вы видите там xml-apis, xerces, xercesImpl, xmlParserAPIs, то это и есть Xerces, просто в различных своих ипостасях.
JAXB — это ещё одна библиотека, которая связана с XML. Больших проблем у пользователей JAXB, насколько я знаю, не было. До тех пор, пока JAXB не решили выпилить из JDK. С этого момента начался
адок. Масла в огонь ещё подлил ребрендинг Java EE в Jakarta EE, в рамках которого JAXB переименовали в
Jakarta XML Binding. Всё это вызвало проблемы при миграции проектов с Java 8 на последние версии Java.
Теперь про
Hibernate, за который проголосовало большинство. Hibernate я использовал много лет назад и относительно недолго. У нас был проект, в котором было огромное количество таблиц (300+), и по моим воспоминаниям Hibernate неплохо так упрощал разработку. Не представляю, как можно было вообще без него обойтись в проекте такого масштаба. Проблемы, конечно, были. Самая главная из них - было очень трудно контролировать производительность SQL-запросов, которые генерировал Hibernate. Когда в запрос вовлечён десяток сущностей с нетривиальными отношениями, то итоговый SQL может быть таким, что без бутылки разобраться, почему он тормозит, почти нереально. В итоге тестеры постоянно жаловались, что вроде бы не очень сложная веб-страница открывается десятки секунд. И в этом то и проблема Hibernate: он слишком просто и быстро позволяет "колбасить" новые сущности. Если вчера вы вроде всё контролировали в своей схеме, то сегодня пришёл джуниор, добавил 5 новых таблиц и 17 новых отношений, навесил аннотаций, и сегодня у вас всё начало тормозить. Hibernate — это слишком мощный инструмент, который нельзя доверять простым смертным. With great power comes great responsibility.