Как сделать так, чтобы SBT не сообщал о предупреждениях компиляции для сгенерированного кода?

#sbt

#scala #sbt

Вопрос:

Я генерирую код с помощью плагина scalaxb-sbt, который при компиляции генерирует большое количество предупреждающих сообщений. Есть ли какой-нибудь способ скрыть предупреждения о компиляции для сгенерированного кода или по пакету?

Ответ №1:

Плагин компилятора silencer позволяет подавлять предупреждения компилятора. Он поддерживает фильтрацию файлов по пути. Это позволит отфильтровать все сгенерированные файлы из предупреждений:

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

Ответ №2:

Для Scala 2.12.13 или 2.13.2

Последние версии компилятора Scala интегрируют плагин silencer, см. Раздел Настраиваемые предупреждения.
Так что теперь вам не нужен никакой плагин, просто добавьте следующую строку в 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

Комментарии:

1. Это отключает все предупреждения, и я прошу сделать это выборочно.

Ответ №4:

Я обнаружил, что мне нужно сделать set logLevel in Compile := Level.Error в моем сеансе консоли sbt, чтобы это сработало. Это с большой буквы C Compile . Это касается версии sbt 0.13.11 . Однако это также позволяет отключить все предупреждения.

Комментарии:

1. Мне также нужно было добавить свой проект, например: set logLevel in search in Compile := Level.Error

Ответ №5:

Поместить код в подпроект и установить scalacOptions по-другому в этом проекте? Будет ли это работать, зависит от того, существует ли вообще поддержка в scalac для подавления определенного вида предупреждений, которые вы получаете. Смотрите, например https://issues.scala-lang.org/browse/SI-1781 . Какие именно предупреждения вам нужно подавить? Некоторые предупреждения, такие как непроверенные предупреждения, могут быть подавлены, например @unchecked , без необходимости выполнения подпроекта.