Shading test JARs using the shadeTestJar configuration option yields an empty test JAR. This has been noticed by others, see for example Steve K's answer on StackOverflow, but people have reverted to other hacks and workarounds to overcome this (e.g. use a different plugin).
- Create modules api, impl and a module uber which has as sole purpose to make an uber JAR for the combination of the first two modules. uber itself has no sources.
- Both modules have both jar and test-jar artifacts.
- Configure the maven-shade-plugin in the uber module with the configuration option shadeTestJar set to true.
- Content of uber.jar is the aggregate content of api.jar and impl.jar.
- Content of uber-tests.jar is the aggregate content of api-tests.jar and impl-tests.jar.
- Content of uber.jar is as expected.
- uber-tests.jar is empty.
- The implementation of the shadeTestJar feature in ShaderMojo is buggy and incomplete.
- The call to processArtifactSelectors on line 425 doesn't pass the testArtifacts, so they are never correctly filled in.
- The implementation of processArtifactSelectors doesn't deal with test JARs at all and has to be extended to support them.
- The "if" statement on line 452 incorrectly treats a test JAR as sources.
This whole feature looks like it was done in a hurry as a sloppy copy-paste job, and in 5 years nobody took the time to report or fix it. Amazing. Anyway, you can find my proposed fix in attachment: shadeTestJar.patch. I have tested it manually on my project and it works.