Hallo,
wenn ich das richtig verstehe, hat er das Problem, dass da ein einsames verwaistes class-File liegt und er will
wissen, in welches Package das gehört.
Es sind dabei zwei Situationen zu unterscheiden:
A) Die Klasse "liegt nur falsch", könnte aber geladen werden, wenn sie richtig läge.
B) Die Klasse kann definitiv erst einmal nicht geladen werden (z.B. weil Abhängigkeiten nicht erfüllt sind oder die
VM nicht passt)
zu A):
Wie bereits richtig bemerkt, versagt der URLClassLoader, weil dieser nämlich merkt, dass die Klasse nicht
da ist, wo sie hingehört oder einen falschen Dateinamen hat. Mit einem Trick kann man sie dennoch laden.
Man baut dazu einen ClassLoader, der bei defineClass(name, ...) name=null übergibt. Die Namens- und Paket-Prüfung
wird so unterbunden. Sobald die Klasse geladen ist, lassen sich ihre Eigenschaften per Reflection bestimmen.
Hinweis: Es könnte Probleme mit dieser Lösung geben, wenn eine Klasse gleichen Namens bereits über den regulären ClassPath
geladen wurde.
zu B):
Das ist unangenehm. Dazu muss man den Bytecode untersuchen (siehe VM-Spec). Das ist ein wenig aufwändig ;-)
Gruß,
Karl