我正在尝试跟随sbt documentation生成scaladoc。我有一个多项目(即与子项目的聚合)构建,对于一般设置是./build.sbt
。我添加了以下示例中的最后一个条目:
scalacOptions in ThisBuild ++= Seq("-deprecation", "-unchecked", "-feature")
scalacOptions in ThisBuild += "-no-specialization"
// API docs
scalacOptions in ThisBuild in (Compile,doc) ++= Seq(
"-diagrams", "-doc-title", name.value
)
这没有任何效果。 scaladoc既不会尝试生成图表,也不会设置主文档标题,因此只会忽略这些设置。同样,如果我添加"-foobar"
选项,则不会出现错误。
如何解决此问题(在build.sbt
中,我不想进入project/Build.scala
,谢谢)
答案 0 :(得分:6)
正如Josh所说,ThisBuild
/ ThisProject
的东西会以某种方式相互覆盖。
解决方案是将project/Build.sbt
从sbt迁移0.12次到build.sbt
,幸运的是主要是复制+粘贴,因为sbt 0.13现在接受了很多正常的Scala代码(不是{ {1}} s,但......)。
然后我定义了
object
它有效。
最后烦人的一点是lazy val commonSettings = Project.defaultSettings ++ Seq(
...
scalacOptions ++= Seq(
"-no-specialization",
// "-Xelide-below", "INFO", // elide debug logging!
"-deprecation", "-unchecked", "-feature"
),
// API docs:
scalacOptions in (Compile, doc) ++= Seq(
"-diagrams",
"-diagrams-dot-path", "/usr/local/bin/dot",
// "-diagrams-dot-timeout", "20", "-diagrams-debug",
"-doc-title", name.value
),
...
)
的要求,这真的很糟糕,因为它是一个开源项目,我不想强迫这条路径到其他任何人。为什么我的"-diagrams-dot-path"
找不到dot
哪个 包含$PATH
?
答案 1 :(得分:2)
因此,如果您对doc
任务运行检查,您会发现sbt正在寻找的设置是:
scalacOptions in ThisProject in (Compile, doc)
ThisBuild
保留用于跨项目重复使用(或以这种方式共享)的内容,例如scalaVersions。
现在,问题是scalacOptions in ThisProject in (Compile,doc)
首先会在scalacOptions in ThisProject in Compile
之前阅读scalacOptions in ThisProject
,然后再转到ThisBuild
。
最有可能的是,某些事情是以更高的优先级指定scalacOptions,并忽略您的设置。你应该放弃in ThisBuild
,事情应该适用于根项目。