Должны ли диапазоны версий зависимостей Maven считаться устаревшими?

Учитывая, что очень трудно найти что-либо о диапазонах версий зависимостей в официальной документации (лучшее, что я мог придумать, это http://docs.codehaus.org/display/MAVEN/Dependency+Mediation+and+Conflict+Resolution), интересно, они по-прежнему считаются гражданами 1-го класса Maven POMs.

Я думаю, что большинство людей согласятся с тем, что они плохая практика в любом случае, но мне интересно, почему так трудно найти в ней что-то официальное.

Ответ 1

Они не устарели в формальном смысле, что они будут удалены в будущей версии. Однако их ограничения (и последующее отсутствие широкого внедрения) означают, что они не так полезны, как первоначально предполагалось, а также что они вряд ли получат улучшения без значительного переосмысления.

Вот почему документация находится только в форме документа doc - они существуют, но важные варианты использования никогда не заканчивались до такой степени, что я бы рекомендовал в целом использовать их.

Если у вас есть прецедент, который работает в настоящее время, и он может вместить ограничения, вы можете ожидать, что они продолжат работать в обозримом будущем, но в работах мало что.

Ответ 2

Я не знаю, почему вы думаете, что диапазоны версий не документированы. В документации Maven Complete Reference есть конкретный реферат.

Тем не менее, огромная проблема (на мой взгляд) заключается в том, что задокументировано, что "Разрешение диапазонов зависимостей не должно преобразовываться в моментальный снимок (версия для разработки), если он не включен в качестве явной границы". (ссылка, которую вы предоставили), но система ведет себя иначе. Если вы используете диапазоны версий, вы получите версии SNAPSHOT, если они существуют в вашем диапазоне (MNG-3092). Дискуссия, разыскивается или нет, еще не закончилась.

В настоящее время - если вы используете диапазоны версий - вы можете получить зависимости SNAPSHOT. Таким образом, вы действительно должны быть осторожны и решить, если это нужно. Это может быть полезно для ваших собственных разработанных зависимостей, но я сомневаюсь, что вы должны использовать его для сторонних библиотек.

Ответ 3

Диапазоны версий - единственная причина, по которой Maven по-прежнему полезен. Даже если вы не используете их, это плохая практика, так как это приводит вас к катастрофе многомодульных сборок, нефункциональных родительских попов, сборкам, которые занимают 10 минут или больше, плохо структурированные проекты, такие как Spring, Hibernate и Wicket, подкаст "Нелегальный аргумент".

Чтобы ответить на ваш вопрос, они не устарели и активно используются во многих проектах (кроме случаев, когда Sonatype разрешает повреждение метаданных в Apache Maven Central).

Если вы хотите действительно хороший пример сборки без мультимодуля (только для реактора .xml), где используются диапазоны версий, посмотрите на липкий код (http://code.google.com/p/stickycode/)