Как я могу опубликовать снимки при использовании sbt с плагином bintray-sbt?

Недавно я опубликовал пакет для bintray и теперь добавил его в jcenter, что позволяет мне публиковать свои снимки на oss.jfrog.org. Я использую плагин bintray-sbt для публикации.

Для публикации снимков я добавил следующую директиву в свой build.sbt:

publishTo := {
  if (isSnapshot.value)
    Some("OJO" at "https://oss.jfrog.org/oss-snapshot-local/")
  else
    publishTo.value /* Value set by bintray-sbt plugin */
}

Проблема в том, что когда я пытаюсь опубликовать снимок, я получаю следующую ошибку:

[error] (*:bintrayRelease) failed to release richard-w/play-reactivemongo@0.2-SNAPSHOT: {"message":"Resource not found for path 'Richard-W/maven/play-reactivemongo'"}

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

Мой вопрос сейчас: могу ли я как-то отключить плагин bintray-sbt из build.sbt при публикации снимков? Если это не работает: Как настроить sbt для публикации в bintray без использования bintray-sbt. Я никогда не получал URL-шаблон правильно, когда я пытался.

1 ответ

Боролся с той же проблемой некоторое время. Не удалось настроить sbt-bintray, но правильно настроил URL-адреса bintray. Вот мой код:

object implicits {

  val bintrayUser = sbt.settingKey[String]("Bintray user name")
  val bintrayRepository = sbt.settingKey[String]("Bintray repository name")
  val bintrayPackage = sbt.settingKey[String]("Bintray package name")

  implicit class RichProject(project: Project) {

    def publish: Project = project.settings(
      bintrayUser := "your default user",
      bintrayRepository := "your repository",
      bintrayPackage := name.value,
      credentials += {
        if (isSnapshot.value) {
          Credentials((Path.userHome: RichFile) / ".ivy2/nexus.credentials")
        } else {
          Credentials((Path.userHome: RichFile) / ".ivy2/bintray.credentials")
        }
      },
      publishTo := {
        if (isSnapshot.value) {
          Some(("snapshots": RepositoryName) at "snapshots repo url")
        } else {
          Some(("releases": RepositoryName) at s"https://api.bintray.com/maven/${bintrayUser.value}/${bintrayRepository.value}/${bintrayPackage.value}/;publish=1")
        }
      }
    )    
  }

Также обратите внимание, что я добавил несколько ключей для конфигурации репозитория bintray. Вы можете установить эти ключи в дочерних проектах и ​​переопределить значения по умолчанию.

Я использую эти свойства, как это:

def library1: Project = publish.settings(
  organization := "io.library1",
  bintrayPackage := s"library1-${name.value}"
)

И тогда в build.sbt я могу сделать:

import implicits._
lazy val `library1-part1` = project.library1
Другие вопросы по тегам