#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
, без необходимости выполнения подпроекта.