【问题标题】:Running sbt release task from cli for sub-project doesn't work从 cli 为子项目运行 sbt 发布任务不起作用
【发布时间】:2017-10-25 19:54:08
【问题描述】:

我有一个多项目 sbt,我在其中使用 sbt-release 插件。如果我在子项目中运行 release,一切正常

> project reporter
[info] Set current project to reporter (in build file:/source/storage-integ/)
> release
[info] Starting release process off commit: c069698baf8bb6fca611ab4e7e086398aab473c5
[info] Checking remote [origin] ...

但是当我从 cli 运行“sbt report/release”时,这不起作用。 “sbt Reporter/compile”或“sbt Reporter/assembly”在哪里起作用。

$ sbt reporter/release
[warn] Executing in batch mode.
[warn]   For better performance, hit [ENTER] to switch to interactive mode, or
[warn]   consider launching sbt without any commands, or explicitly passing 'shell'
[info] Loading global plugins from /home/vagrant/.sbt/0.13/plugins
[info] Loading project definition from /source/storage-integ/project
[info] Set current project to root (in build file:/source/storage-integ/)
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: release (similar: releaseVcs, rpmRelease, rpm-release)
[error] reporter/release

这看起来与另一个 SO post 非常相似。我尝试按照建议将releaseSettings 添加到build.sbt,但它会引发错误

build.sbt:62: error: not found: value releaseSettings

我尝试了import sbtrelease.Release._,但抛出了

error: object Release is not a member of package sbtrelease

在这一点上,我觉得提到的解决方案不再有效。另外,我在 sbt-release 自述文件中没有看到对 releaseSettings 的任何引用。知道如何让它工作吗?

sbt.version = 0.13.15 && sbt-release: "1.0.6"

【问题讨论】:

  • 怎么样:sbt "project reporter" release?它也不起作用吗?

标签: sbt sbt-release


【解决方案1】:

发布设置应仅在您的root 项目中。所以,为了拥有它:

首先,您的build.sbt 可能是这样的

lazy val root: Project = project.in(file("."))
  .settings(Releases.settings: _*)
  .aggregate(module1, module2)

那么,你的project/Releases.scala 喜欢:

object Releases {

 // You need to custom these to reflect your actual procedure
 private val releaseProcess = Def.setting {
   Seq[ReleaseStep](
    checkSnapshotDependencies,
    inquireVersions,          
    runClean,                 
    runTest,                  
    setReleaseVersion,        
    commitReleaseVersion,     
    tagRelease,               
    publishArtifacts,         
    setNextVersion,          
    commitNextVersion,       
    pushChanges          
   )
  }

  val settings = Seq(
    releaseCommitMessage := s"Set version to ${(version in ThisBuild).value}",
    releaseTagName := (version in ThisBuild).value,
    releaseProcess := releaseProcess.value
  )
}

默认情况下,您的当前版本需要version.sbt。让我们说:

version in ThisBuild := "1.0.0-SNAPSHOT"

那么就:

sbt 发布

【讨论】:

  • 使用这种方法,所有子项目都将具有相同的发布步骤。我有两个子项目,它们有一个不同的 ReleaseStep。 Module1 上传一个 jar 文件,module2 构建一个 docker 容器并将其推送到 repo。这就是为什么我需要一种方法来运行每个子项目的发布任务,并在 sub-project/build.sbt 中为它们定义不同的发布步骤序列
猜你喜欢
  • 1970-01-01
  • 2015-01-18
  • 2020-02-05
  • 1970-01-01
  • 2016-09-03
  • 2012-04-04
  • 2015-05-11
  • 2020-05-15
  • 2019-06-28
相关资源
最近更新 更多