Das Problem aufgrund nicht einen Klassenlader hat, kann sein lesen, die den Namen auflösen können (auch wenn es den Subtyp auflösen kann). Das klingt widersprüchlich, aber ich hatte die Fehlermeldung, als ich eine Konfiguration erstellte und ClasspathHelper.forClassLoader
auf einem anwendungsinstanziierten URLClassloader verwendete, um herauszufinden, was auf dem Klassenpfad gescannt werden sollte, aber den URLClassLoader nicht in die Reflections-Konfiguration übergab, damit er instanziieren konnte Dinge richtig.
So können Sie etwas entlang der Linien der folgenden versuchen:
URLClassLoader urlcl = new URLClassLoader(urls);
Reflections reflections = new Reflections(
new ConfigurationBuilder().setUrls(
ClasspathHelper.forClassLoader(urlcl)
).addClassLoader(urlcl)
);
wo urls
ist ein Array von URLS zu den Gläsern den Klassen, die Sie laden möchten. Ich habe den gleichen Fehler erhalten wie Sie, wenn ich nicht den letzten addClassLoader(...)
Anruf an die ConfigurationBuilder
hatte.
Wenn dies nicht funktioniert oder nicht anwendbar ist, kann es sinnvoll sein, einfach einen Haltepunkt in ReflectionsUtil.forName(String typeName, ClassLoader... classLoaders))
zu setzen, um zu sehen, was passiert.
Sie müssen etwas mehr Code (wie die ExtendsFoo-Klasse), vielleicht ein paar Informationen über die Paketstruktur und vielleicht ein bisschen mehr der Stack-Trace der Ausnahme bereitstellen. –
Ist Reflections eine Klasse von Java API? Geben Sie uns weitere Informationen .. – Satya
Ich verwende dies wie von meinem Tag angezeigt: https://code.google.com/p/reflections/ – Kezz101