Как исключить файлы и пакеты?

Я пытаюсь исключить пакеты и файлы из отчета о покрытии.

Однако он не исключает указанные файлы и упакованные.

Я делаю это:

<excludedPackages>*api.test.*</excludedPackages> 
<excludedFiles>.*File.scala</excludedFiles>

Может ли кто-нибудь предложить, как это работает для вас?

Здоровья В.


person axy3yz    schedule 22.12.2017    source источник


Ответы (3)


Аналогично https://stackoverflow.com/a/44346781/2370679

Добавьте в файл build.sbt следующее:

Чтобы исключить пакеты (например, чтобы исключить пакеты *api.test.* и *api.db*):

coverageExcludedPackages := "<empty>;*api.test.*;*api.db*"

Вы также можете использовать синтаксис для исключения файлов:

coverageExcludedPackages := "*File.scala"

Для вашего конкретного примера вы можете попробовать:

coverageExcludedPackages := "*File.scala;*api.test.*"

Ссылка: https://github.com/scoverage/sbt-scoverage#exclude-classes-and-packages

person muya_    schedule 31.05.2018
comment
почему мы добавляем <empty>;, не могли бы вы объяснить подробнее? - person Rumesh Krishnan; 04.01.2019
comment
Это неправильно. В соответствии с указанной ссылкой вы должны использовать регулярное выражение (не GLOB), которое соответствует только полным именам классов, а не именам файлов. - person Eyal Roth; 24.01.2019
comment
Я получаю сообщение об ошибке Висячий метасимвол '*' рядом с индексом 0 - person Vivek; 14.10.2019

Кажется, вы делаете это правильно, хотя я не совсем знаком с плагином Maven, который вы, похоже, используете.

Дело в том, что когда охват исключает файлы, он все равно компилирует классы в них, но не инструментирует их, в результате получается файл .class, идентичный тому, который будет создан при компиляции без плагина. Вас может сбить с толку то, что вы видите .class файлов для классов, созданных в исходных файлах, которые вы явно исключили — это действительно смутило меня — но именно так работает плагин.

Обновление:

Плагин Scoverage scalac попытается сопоставить пути к файлам с регулярным выражением после удаления из них .scala; то есть, опустите .scala из вашего регулярного выражения, так как оно никогда не будет соответствовать шаблону файла.

Также обратите внимание, что регулярное выражение сопоставляется с путями, а не с именами классов; т. е. используйте / вместо \.. Не могу сказать, работает ли это в Windows (если нет, то это ошибка плагина scalac).

person Eyal Roth    schedule 24.01.2019

В моем build.sbt я смог исключить классы, используя следующую строку:

coverageExcludedPackages := "<empty>;.*ExcludeThisClass;.*BuildInfo",

Примечание. Начальное значение <empty>; было необходимо, чтобы оно срабатывало при первом исключении. Не уверен, почему это так, но это соответствует объяснению их readme:

person orangemark15    schedule 03.07.2019