tl; dr Я бы назвал это трюком, а не особенностью sbt.Вас предупредили.
Допустим, у вас есть file.jar
для публикации.Как и для любого инструмента сборки, включая sbt, он предназначен для выполнения задач, которые в конечном итоге создают артефакт - в большинстве случаев файл jar - из файлов в проекте.
Проект устанавливает координаты для артефакта.
Хитрость заключается в том, чтобы использовать то, что sbt требуется для настройки среды (= координаты ) дляjar для публикации (в противном случае вы должны будете указать их в командной строке, которая может быть или не быть очень удобной для пользователя).
Создайте build.sbt
с необходимыми настройками - organization
, name
, version
и, возможно, scalaVersion
- и сохраните его там, где находится файл jar.
organization := "org.abc"
name := "my-own-publish-jar"
version := "1.0.0"
scalaVersion := "2.11.3"
packageBin in Compile := file(s"${name.value}_${scalaBinaryVersion.value}.jar")
Возможно, вы заметили, что сборка изменяет задачу compile:package
так, чтобы она указывала на файл jar.
Вот и все.
Выполните sbt publishLocal
, и файл JAR должен находиться в локальном репозитории Ivy2, т.е. ~/.ivy2/local/org.abc/my-own-publish-jar_2.11/1.0.0/jars/my-own-publish-jar_2.11.jar
.
protip Написание плагинасделать это с помощью координат, указанных в командной строке, теперь довольно просто.