问题描述
我正在尝试使用 sbt multi-project 配置新的 Scala 构建。我想使用 sbt-protoc,特别是需要此配置设置的 ScalaPB:
Compile / PB.targets := Seq(
scalapb.gen() -> (Compile / sourceManaged).value
)
现在的问题是如何在多项目中正确应用该 sbt.librarymanagement.Configurations.Compile
配置。我使用的是 Scala 2.13 和 sbt 1.4.7。
我目前的build.sbt
:
Compile / PB.targets := Seq(
scalapb.gen() -> (Compile / sourceManaged).value
)
lazy val commonSettings = List(
scalaVersion := scala212,scalacOptions ++= Seq(
"utf8","-Ypartial-unification"
)
)
lazy val core = (project in file("core"))
.settings(
commonSettings,name := "twirp4s-core",crossScalaVersions := Seq(scala212,scala213),libraryDependencies ++= Seq(
catsCore,circeCore,circeGeneric,circeParser,http4sDsl,http4sCirce
),addCompilerPlugin(betterMonadicForPlugin),)
lazy val root = (project in file("."))
.aggregate(core)
.settings(
name := "twirp4s-root",libraryDependencies += scalaTest % Test,skip in publish := true
)
当我尝试编译我的项目时,编译器说:
[info] Protobufs files found,but PB.targets is empty.
解决方法
正如您已经发现的,@Seth 在评论中建议,将 Compile / PB.targets
移动到 core.settings 中是可行的。这是您应该使用的 build.sbt
:
lazy val commonSettings = List(
scalaVersion := scala212,scalacOptions ++= Seq(
"utf8","-Ypartial-unification"
)
)
lazy val core = (project in file("core"))
.settings(
commonSettings,name := "twirp4s-core",crossScalaVersions := Seq(scala212,scala213),libraryDependencies ++= Seq(
catsCore,circeCore,circeGeneric,circeParser,http4sDsl,http4sCirce
),addCompilerPlugin(betterMonadicForPlugin),Compile / PB.targets := Seq(
scalapb.gen() -> (Compile / sourceManaged).value
)
)
lazy val root = (project in file("."))
.aggregate(core)
.settings(
name := "twirp4s-root",libraryDependencies += scalaTest % Test,skip in publish := true
)