【问题标题】:How to make SBT not reporting compilation warnings for generated code?如何使 SBT 不报告生成代码的编译警告?
【发布时间】:2021-02-24 23:36:16
【问题描述】:

我使用 scalaxb-sbt 插件生成代码,该插件在编译时会生成大量警告消息。有没有办法隐藏生成代码或包的编译警告?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    silencer 编译器插件允许抑制编译器警告。它支持按路径过滤文件。这将从警告中过滤掉所有生成的文件:

    scalacOptions += "-P:silencer:pathFilters=src_managed"
    

    【讨论】:

      【解决方案2】:

      对于 Scala 2.12.13+ 或 2.13.2+

      Scala 编译器的最新版本集成了消音器插件,请参阅configurable warnings
      所以现在你不需要任何插件,只需将以下行添加到build.sbt

      ThisBuild / scalacOptions += "-Wconf:src=src_managed/.*:silent"
      

      使用此选项将禁止对位于源代码树中任何位置名为 src_managed 的目录下的生成代码发出警告。

      这解决了我使用zio-grpc 生成的代码的问题,其中编译器发出了parameter value evidence$3 in method live is never used 之类的警告(添加此信息只是为了更好地搜索)。

      【讨论】:

        【解决方案3】:

        在您的 sbt 控制台中,您可以尝试以下操作: set logLevel in compile := Level.Error 或最终set logLevel in sourceGenerators := Level.Error 并尝试不同的设置。满意后,您可以在 build.sbt 中应用此设置。

        更多详细信息可以在 sbt 文档中找到:http://www.scala-sbt.org/release/docs/Howto/logging.html

        【讨论】:

        • 这会关闭所有警告,我要求有选择地这样做。
        【解决方案4】:

        我发现我需要在我的 sbt 控制台会话中执行 set logLevel in Compile := Level.Error 才能使其工作。这是Compile 中的大写字母C。这是 sbt 版本 0.13.11。不过,这也是为了关闭所有警告。

        【讨论】:

        • 我还需要添加我的项目,例如:set logLevel in search in Compile := Level.Error
        【解决方案5】:

        将代码放在子项目中,并在该项目中以不同方式设置scalacOptions?这是否可行取决于 scalac 中是否存在用于抑制您收到的特定类型警告的支持。参见例如 https://issues.scala-lang.org/browse/SI-1781 。您需要准确抑制什么样的警告?某些警告(如未经检查的警告)可以通过例如@unchecked 无需做子项目的事情。

        【讨论】:

          猜你喜欢
          • 2022-11-30
          • 1970-01-01
          • 2013-08-11
          • 1970-01-01
          • 1970-01-01
          • 2013-09-14
          • 1970-01-01
          • 1970-01-01
          • 2016-01-08
          相关资源
          最近更新 更多