将 sbt 与 bintray-sbt 插件一起使用时如何发布快照?
How can i publish snapshots when using sbt with the bintray-sbt plugin?
我最近发布了一个包到 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 中。遇到此错误时,发布过程已准备就绪,但这似乎不干净且不可靠。禁用自动释放
摆脱了错误,但它产生了一个毫无意义的警告。
我现在的问题是:
我可以在发布快照时以某种方式从 build.sbt 禁用 bintray-sbt 插件吗?如果这不起作用:如何配置 sbt 以在不使用 bintray-sbt 的情况下发布到 bintray。当我尝试时,我从来没有得到正确的 URL-Pattern。
为同样的问题苦苦挣扎了一段时间。
没有设法配置 sbt-bintray,但正确配置了 bintray url。这是我的代码:
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
我最近发布了一个包到 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 中。遇到此错误时,发布过程已准备就绪,但这似乎不干净且不可靠。禁用自动释放 摆脱了错误,但它产生了一个毫无意义的警告。
我现在的问题是: 我可以在发布快照时以某种方式从 build.sbt 禁用 bintray-sbt 插件吗?如果这不起作用:如何配置 sbt 以在不使用 bintray-sbt 的情况下发布到 bintray。当我尝试时,我从来没有得到正确的 URL-Pattern。
为同样的问题苦苦挣扎了一段时间。 没有设法配置 sbt-bintray,但正确配置了 bintray url。这是我的代码:
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