2013-08-05 9 views
20

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

Вот соответствующая строка из плагина 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, без необходимости выпуска новой версии плагина?

Here is how to do it in Maven. Но как это сделать в sbt?

ответ

29

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

Если версия, которую вы хотите использовать, больше, чем зависимость, которую вы получите транзитивно, 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" 

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

+0

Вот проблема, которую я получил и хочу поделиться: день 0: текущая онлайн-версия плагина '0.3' | day1: Я публикую локально мой плагин in-development с версией '0.4' и ссылаюсь на этот плагин с локальным хранилищем | день 2: плагин опубликован с версией '0.4' на интернет-официальном репо | день 3: мой плагин больше не делает того, чего я ожидаю, потому что sbt загружает оба плагина, но решает взять его из Интернета. Чтобы обойти проблему, мне пришлось изменить мою версию на «0,5», а затем она сработала. – Maxence

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