如何在使用bintray-sbt插件的sbt时发布快照?

时间:2015-06-11 09:00:44

标签: scala sbt bintray maven-publish

我最近向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中。在遇到此错误时,发布过程已准备就绪,但这似乎是不洁净和hacky。禁用自动释放 摆脱错误,但它产生无意义的警告。

我现在的问题是: 我可以在发布快照时以某种方式从build.sbt禁用bintray-sbt插件吗?如果这不起作用:如何配置sbt以在不使用bintray-sbt的情况下发布到bintray。我试过的时候从未得到过URL-Pattern。

1 个答案:

答案 0 :(得分:0)

在一段时间内遇到同样的问题。 没有设法配置sbt-bintray,但正确配置了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