Leszek Gawron zaproponował trochę inne podejście do problemu. Nie ukrywam znacznie bardziej eleganckie. Nie pozbawione jednak wad. Najpoważniejszą było wymuszenie by automatyczna detekcja zadziałała po załadowaniu klas. Zmodyfikowałem to podejście pozwalając JVM by odpowiednio szybko i w kolejności ładowała klasy. Wykorzystałem pliki usługi w których zamieściłem spis implementacji. Teraz JVM ładując jara i skanując jego zawartość załaduje wszystkie klasy. Późniejsze wywołanie Class.forName() spowoduje tylko doładowanie klasy ze znanego położenia. Nie dojdzie do sytuacji w której classloader nie będzie wiedział gdzie szukać danej klasy.

Na prośbę Leszka licencja zmienia się na bardziej liberalną BSD. Jak szaleć to szaleć.