如何在 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 重新运行以获取详细信息”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sbt 项目中使用 sbt 插件作为库依赖项?

如何在依赖 URL 中下载没有 SBT 版本的 sbt 插件依赖?

如何在子项目中使用 sbt native packager (sbt 0.13)

如何在 sbt 子项目 build.sbt 文件中获取对当前项目的引用

如何更改 sbt 项目的 Scala 版本?

如何在 Windows 中启用 SBT 远程调试?