4

我正在尝试按照sbt 文档进行 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,谢谢)

4

2 回答 2

6

所以正如乔希所说,ThisBuild/ThisProject东西以某种方式相互覆盖。

project/Build.sbt解决方案是将sbt 0.12 次迁移到build.sbt.,幸运的是,这主要是复制 + 粘贴,因为 sbt 0.13 现在接受了很多普通的 Scala 代码(object虽然不是 s...)。

然后我定义

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为什么它在我的$PATHwhich does include上找不到/user/local/bin

于 2013-11-15T20:29:49.553 回答
2

因此,如果您对doc任务运行检查,您会发现 sbt 正在寻找的设置是:

scalacOptions in ThisProject in (Compile, doc)

ThisBuild保留用于跨项目重用(或以这种方式共享)的东西,例如 scalaVersions。

现在,问题是在检查之前scalacOptions in ThisProject in (Compile,doc)将首先读取.scalacOptions in ThisProject in CompilescalacOptions in ThisProjectThisBuild

最有可能的是,某些东西以更高的优先级指定了 scalacOptions 并且您的设置被忽略了。你应该放弃in ThisBuild并且事情应该适用于根项目。

于 2013-11-15T20:00:46.137 回答