sbt忽略了我的scaladoc设置

时间:2013-11-15 19:40:13

标签: scala sbt scaladoc

我正在尝试跟随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,谢谢)

2 个答案:

答案 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,事情应该适用于根项目。