Подтвердить что ты не робот

Как переопределить зависимость плагина sbt?

Я написал плагин sbt под названием sbt-jumi, который реализует интеграцию sbt для Jumi. Прямо сейчас плагин sbt-jumi зависит от текущей версии Jumi.

Вот соответствующая строка из плагина build.sbt:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.5.376"

И пользователь плагина добавит это в свой файл project/plugins.sbt:

addSbtPlugin("fi.jumi.sbt" % "sbt-jumi" % "0.1.0")

Теперь скажем, что Jumi 0.6.400 выпущен и обратно совместим. Как пользователь плагина sbt-jumi настраивает его на использование Jumi 0.6.400, без необходимости выпуска новой версии плагина?

Вот как это сделать в Maven. Но как это сделать в sbt?

4b9b3361

Ответ 1

Переопределение зависимостей плагинов происходит так же, как переопределение обычных зависимостей, за исключением того, что конфигурация должна быть введена в project/plugins.sbt. Переопределяющие зависимости объясняются в Управление библиотекой. Вот резюме:

Если версия, которую вы хотите использовать, больше, чем зависимость, которую вы получите транзитивно, sbt будет использовать большую версию по умолчанию. Вы можете изменить диспетчер конфликтов, чтобы изменить поведение по умолчанию - например, это создаст ошибку в конфликте:

conflictManager := ConflictManager.strict

Другими словами, это в project/plugins.sbt будет работать:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.6.400"

Вы можете проверить свои зависимостей плагина с помощью reload plugins, а затем show update. Теперь он должен показать более старую версию как "(EVICTED)".

Если версия, которую вы хотите использовать, ниже, чем стандартная зависимость, тогда вам нужно будет переопределить по-разному. Одним из способов является принудительная зависимость:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.4.350" force()

Другой способ - использовать параметр dependencyOverrides:

dependencyOverrides += "fi.jumi" % "jumi-launcher" % "0.4.350"

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