Как разработчик, меня часто интересует новая языковая функция, которая может сделать вашу жизнь проще. Например, java 5 привнес язык и аннотации к языку, функции, которые определенно могут повысить вашу производительность.
Однако, оглядываясь назад на почти десятилетие работы над Java-платформой, я обнаружил, что проблемы, связанные с управлением версиями, являются основной причиной непродуктивных и излишне затраченных усилий. Часами и часами искали правильную версию jar, пытались разрешить конфликт версий, обновляли зависимые библиотеки и т. Д. Когда я начал работать в java, все было не так сложно, у вас было бы несколько сторонних библиотек, и все , Сегодня ваше типичное веб-приложение может легко использоваться: Spring Framework, Hibernate, Struts, как вы его называете. Все они содержат ряд зависимых сторонних библиотек. Сегодня мои ушные архивы обычно включают около 40 или более сторонних библиотек. Настоящий кувшин, черт возьми!
С аннотациями мне не нужно, например, управлять файлами конфигурации для Hibernate. Хорошая функция, но я не видел, чтобы многие проблемы возникали из-за того, что я держу свои дескрипторы в отдельном файле. Что касается дженериков, то я избавлен от написания операторов приведения, но во всем своем программном обеспечении я не могу вспомнить ни одной ошибки, которую можно было бы предотвратить, используя безопасный для типов контейнер. Разве решение проблем управления версиями не было бы гораздо более ценным?
Все эти проблемы привели к появлению ряда инструментов, таких как Maven , ivy , One Jar , Jar Jar Links (не шучу !), даже с соответствующим названием Jar Hell и т. д. Даже если вы используете некоторые из этих инструментов, вы далеко не застрахованы от этой проблемы. Я использую Maven 2, и это мне очень помогло. Тем не менее, это мир для себя. Начинающему программисту может понадобиться время, чтобы выучить его. Перенос ваших старых проектов в структуру Maven также является проблемой.
Похоже, что в .Net они усвоили урок с dll hell, и управление сборками .Net намного проще.
Кажется, есть планы решить эту проблему для платформы Java и альтернатив, таких как OSGI. Я думаю, что какой-то базовый и принудительный механизм управления версиями крайне необходим