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

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

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

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

【问题讨论】:

标签: sbt


【解决方案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 插件是胖语言服务器的小伙伴。您可以单独使用它。或者可以只是从中复制一些功能。
    猜你喜欢
    • 2014-07-18
    • 2018-05-23
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多