4

проблемы, которая относится к основным понятиям Maven:морозильных транзитивные зависимости по выпуску Maven, чтобы получить построить полностью воспроизводимые

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

К сожалению, это не так, если зависимости выражаются в терминах диапазонов версий. Может случиться так, что даже если заданы прямые зависимости проекта (с использованием versions:use-releases), транзитивные зависимости все же могут быть решены каким-то другим способом в будущем.

Как решить проблему? Есть ли известное решение?

Я думал (просто идея) о создании плагина, который в момент выпуска удалял бы все зависимости проекта к отдельному файлу, а затем, когда он строился в будущем, зависимости, считанные из файла, приоритет над стандартным способом использования maven для разрешения зависимостей. Но я боюсь, что для этого нет плагина api. Так что это потребует некоторого взлома, которого я бы хотел избежать. Есть ли другой способ?

Спасибо, Лукаш

ответ

2

Заменить значения артефактов, используя <dependencyManagement>. Даже если вы не используете диапазоны версий (как вы сказали), а скорее - сторонние библиотеки (ваши зависимости), ваш <dependencyManagement> будет иметь более высокий приоритет при указании версии любых артефактов.

+0

Тот же вопрос, что и я, к khmarbaise: Как легко идентифицировать такие «опасные» зависимости? dependency: tree показывает зависимости после того, как диапазоны уже разрешены. –

0

Самое простое решение: Не используйте версию-диапазонов. Это плохая практика, потому что это приведет к описанным проблемам.

+0

Я их не использую. Но что, если они используются в стороннем проекте, от которого зависят мои проекты? –

+1

Использовать, как описано в описании зависимости от сторонних артефактов, у них более высокий приоритет. – khmarbaise

+0

Не уверен, правильно ли я понимаю. Итак, вы советуете переопределить зависимости артефактов третьей части в моих проектах? Правильно ли это? Если да, то как легко идентифицировать такие «опасные» зависимости? dependency: tree показывает зависимости после того, как диапазоны уже разрешены. –

Смежные вопросы