Уникати конфліктів версій залежності?


10

Будь-який проект Java, який використовує мій jar, майже напевно матиме додаткову залежність від іншої банки, яку мій jar також містить як залежність.

Проблема в тому, що інша банка має кілька версій.

Як я можу уникнути будь-яких проблем, які можуть виникнути, імовірно, версія 2-ї банки вашого проекту відрізняється від версії 2-ї банки мого баночка?

Я не хочу, щоб мої користувачі мали зайвих клопотів виконувати якийсь химерний трюк для завантаження, щоб додати свою банку.

Чи варто просто зробити купу різних версій своєї баночки для кожної можливої ​​версії цієї загальної залежності? І тоді ви просто вибираєте версію моєї баночки, яка використовує ту саму, яку б версію другої банки ви вже мали?

Чи є розумніший спосіб впоратися з цим і полегшити людям використання моєї баночки без конфліктів?

Відповіді:


10

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

Ваше програмне забезпечення повинно правильно працювати з останніми версіями ваших залежностей. Якщо залежність не змінює їх інтерфейс для кожного випуску, у вас повинен бути діапазон сумісності (наприклад, ваше програмне забезпечення працює для всіх версій dep у діапазоні [2.0.0, 3.0.0)). Поки ви підтримуєте програмне забезпечення, вам слід намагатися підтримувати його сумісністю з останньою версією усіх ваших залежностей.

Однак, ось деякі речі, які я вважаю корисними як розробник, що використовує ваше програмне забезпечення з моєю іншою версією вашої залежності.

  • Якщо інтеграція між вашим проектом та іншим проектом є тісною, корисно мати таблицю сумісності у вашій документації. Незважаючи на те, ви повинні згадати будь-які відомі проблеми з конкретними версіями залежності у вашій документації. В іншому випадку розробники повинні знайти сумісну версію шляхом спроб та помилок.
  • Абстрагуйте співпрацю із залежністю за допомогою інтерфейсу та розробіть своє програмне забезпечення, щоб реалізацію можна було замінити введенням залежності. Це дозволяє мені як кінцевому користувачу замінити власну інтеграцію версією x бібліотеки, не турбуючи вас.
  • Майте публічний трекер випуску, щоб ваші користувачі могли попросити вас підтримати певні версії загальної залежності. Якщо ви знайдете, що багато користувачів хочуть підтримувати несумісну версію залежності, ви можете публікувати версії для обох. Дивіться цей приклад Maven, де вони націлені на кілька платформ - підтримка різних версій залежності має бути подібною.

Чи у Java є щось на кшталт налаштування AssemblyRedirect App.config. Я не робив Java вже більше 11 років, тому моя пам'ять про те, як вона справляється з цим, просто ГОЛОВНА.
Іван Заброський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.