Scoverage Breaks with java.lang.No Class Def Found Error: scoverage / Invoker$
If you’ve been using Scoverage with SBT to get some code coverage on your Scala code, you may come across an error while trying to run a main class on instrumentation turned on:
.lang.NoClassDefFoundError: scoverage/Invoker$ java
This is quite puzzling as the tests run fine. I came across a possible Github issue while hunting around for a solution. It sounds like there is a runtime dependency on Scoverage classes.
One way to overcome this issue, is to turn off coverage when running your main class through SBT:
;clean;coverageOff;run
If you’re running SBT externally you can use:
sbt clean coverageOff run
When you want your coverage back on for your tests, you can use:
;clean;coverage;test
Or externally:
sbt clean coverage test
@alexflav23 recommends turning off coverage when publishing or packaging:
You need to disable coverage with coverageOff before publishing or packaging and everything will be just fine. I’ve ran into this issue myself and that was the quick fix.