【问题标题】:Override output directory for sbt multi-project build覆盖 sbt 多项目构建的输出目录
【发布时间】:2015-09-25 05:41:47
【问题描述】:

我正在使用 sbt 进行多项目构建,如下所述:

http://www.scala-sbt.org/0.13/tutorial/Multi-Project.html

这是顶级 build.scala 文件:

import sbt._
import Keys._

object ExampleBuild extends Build {
  lazy val scrooge = Project(
    id = "scrooge",
    base = file("messages-scrooge")
  )
  lazy val examples = Project(
    id = "examples",
    base = file("examples")
  ).dependsOn(scrooge)
}

我想更改目标目录,以便所有输出都转到单独的分区。* 以下似乎可行,但确实很笨重,因为我需要为每个子项目单独更改它。如果有更多,情况只会变得更糟:

target="$HOME/sbt-target"
sbt "project scrooge" "set target := new java.io.File(\"$target/scrooge\")" "project examples" "set target := new java.io.File(\"$target/examples\")" "project root" clean assembly

我更喜欢做类似下面的事情,但是在“示例”项目尝试导入类型的地方,它无法编译,并带有大量关于“object blah is not a member of package...”的消息来自“scrooge”项目。我认为那是因为这两个项目都在踩对方的输出文件。

target="$HOME/sbt-target"
sbt "set every target := new java.io.File(\"$target\")" clean assembly

有没有更好的方法来做到这一点?我不介意更改构建文件,但我不希望在其中包含任何硬编码路径。

* - 我想更改输出目录的原因是我在 Vagrant VM 中构建,源文件夹使用 Virtualbox 共享文件夹从 Windows 主机共享到 Linux VM。 Scala 编译器尝试创建一些超过 Windows 260 字符路径限制的非常长的文件名。如果您坚信我最好尝试以不同的方式解决此问题,请告诉我,我将发布一个单独的问题,但我已经在这个方向遇到了很多问题,因此我希望只需更改目标目录。

【问题讨论】:

    标签: sbt


    【解决方案1】:

    我用一个插件来做到这一点。就我而言,我尝试合并所有 target/ 文件夹(没有冲突):

    package sbt
    package plugins
    
    /** [[PluginOptimizedLayout]] is an [[AutoPlugin]] that consolidates `target/` folders under the root `target/`.
      * 
      * This removes noise when navigating the source folders; and enables elision of `src/`.
      */
    object PluginOptimizedLayout extends AutoPlugin {    
      import Keys._
    
      override def requires = JvmPlugin
      override def trigger = allRequirements
    
      override lazy val projectSettings = Seq(
        target := {
          (ThisBuild / baseDirectory).value / "target" / thisProject.value.id
        }
      )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2018-04-09
      • 2018-05-25
      • 2016-08-07
      • 2021-05-28
      • 1970-01-01
      • 2020-01-13
      相关资源
      最近更新 更多