gpt4 book ai didi

sbt - 覆盖 sbt 多项目构建的输出目录

转载 作者:行者123 更新时间:2023-12-03 17:18:14 24 4
gpt4 key购买 nike

我正在使用 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

我更喜欢做一些更像下面的事情,但是在“示例”项目试图从“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 字符路径限制的非常长的文件名。如果你坚信我会更好地尝试以不同的方式解决这个问题,请告诉我,我会发布一个单独的问题,但我已经在这个方向上遇到了很多问题,因此我希望只需更改目标目录。

最佳答案

我用一个插件来做到这一点。就我而言,我尝试合并所有 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
}
)
}

关于sbt - 覆盖 sbt 多项目构建的输出目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com