如何在 sbt 中“使用 -deprecation 重新运行以获取详细信息”?

Posted

技术标签:

【中文标题】如何在 sbt 中“使用 -deprecation 重新运行以获取详细信息”?【英文标题】:How to "re-run with -deprecation for details" in sbt? 【发布时间】:2012-03-23 15:01:05 【问题描述】:

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

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

我该怎么做? (来自 SBT 内部?)

【问题讨论】:

***.com/questions/9415962/…的类似问题(包括您的问题的答案) 【参考方案1】:

sbt 外壳

在 sbt shell 中(如果您不想更改 build.sbt):

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

由于in ThisBuildset 也将设置应用于所有子项目。

命令行

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

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

诀窍是使用;(分号)分隔命令,使用'(记号)将所有;分隔的命令作为单个参数包含在sbt 中。

sbt

scalacOptions in ThisBuild代替ThisBuild/scalacOptions

【讨论】:

@retronym: in Global 而不是 in ThisBuild 也同样适用于子项目——但为什么首选后者?还是这样?【参考方案2】:
scalacOptions := Seq("-unchecked", "-deprecation")

将此设置添加到您的 build.sbt,如果您有一个多模块项目,请将其添加到每个项目的设置中。

【讨论】:

【参考方案3】:

随着时代的发展,新的解决方案不断涌现。因此,现在您可以重新运行 scala 编译器,而无需重新构建整个项目。

你需要安装ensime-sbt plugin:

addSbtPlugin("org.ensime" % "sbt-ensime" % "1.0.0")

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

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

【讨论】:

添加 Ensime 只是为了获得 -deprecation 是一个糟糕的主意。 Ensime 用于支持编辑器中的动态注释。除此之外,Ensime 本身在某些类型的项目(尤其是那些大量使用宏的项目)中存在许多问题。 ensime 插件是胖语言服务器的小伙伴。您可以单独使用它。或者可以只是从中复制一些功能。

以上是关于如何在 sbt 中“使用 -deprecation 重新运行以获取详细信息”?的主要内容,如果未能解决你的问题,请参考以下文章