如何在sbt中重新运行并显示“-deprecation for details”?

186

当我通过运行sbt compile编译Scala代码时,SBT会提示:

$ sbt compile
...
[warn] there were 5 deprecation warnings; re-run with -deprecation for details
...

我该怎么做?(从SBT内部进行?)


2
类似的问题(包括你的问题的答案)在https://dev59.com/D2ox5IYBdhLWcg3wIQ5o上。 - Kristian Domagala
3个回答

236

sbt shell

如果你不想改变你的build.sbt,在sbt shell中:

$ sbt
> set ThisBuild/scalacOptions ++= Seq("-unchecked", "-deprecation")
> compile
> exit

由于使用了in ThisBuildset会同时将设置应用到所有子项目中。

命令行

您也可以在命令行上将上述内容作为单个命令运行。

sbt '; set ThisBuild/scalacOptions ++= Seq("-unchecked", "-deprecation") ; compile' 

关键是使用 ;(分号)来分隔命令,并使用 '(反引号)将所有以 ; 分隔的命令作为单个参数包含在 sbt 中。

sbt < 1.x

使用 scalacOptions in ThisBuild 替代 ThisBuild/scalacOptions


2
@retronym:在子项目中,“in Global”而不是“in ThisBuild”同样适用,但为什么后者更受青睐?或者说它是否更好? - Erik Kaplun

30
scalacOptions := Seq("-unchecked", "-deprecation")

将以下设置添加到您的 build.sbt 文件中,如果您有一个多模块项目,请将它添加到每个项目的设置中。


-3
随着时间的推移,新的解决方案不断涌现。因此,现在您可以重新运行Scala编译器,而无需发出整个项目重建的命令。
您需要安装ensime-sbt插件
addSbtPlugin("org.ensime" % "sbt-ensime" % "1.0.0")

之后,您可以使用ensimeCompileOnly任务来编译单个文件。SBT允许每个任务进行设置配置,因此您可以仅更改该任务的设置:

set scalacOptions in (Compile, EnsimeKeys.ensimeCompileOnly) += "-deprecation"
ensimeCompileOnly src/main/scala/MyFile.scala

1
仅仅为了获取-deprecation而添加Ensime是一个糟糕的想法。Ensime是用于支持编辑器中的即时注释的。此外,Ensime本身在某些类型的项目(尤其是那些大量使用宏的项目)中存在许多问题。 - Zaphod
Ensime插件是Fat语言服务器的小伙伴。您可以单独使用它,或者只需从中复制一些功能即可。 - ayvango

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接