Have you come across JaCoCo [1]? It does its instrumentation via a JVM agent at runtime-- no need to recompile your code just to test for coverage.
I've been using it for the last year or two and love it! One of my favorite features is how easy it is to generate separate coverage information for unit tests vs. integration tests. Sonar provides excellent support for it, as well.