Kein Zugriff auf ein geschütztes Mitglied der Superklasse aus demselben Paket in einem anderen Jar

Ich habe ein seltsames Problem, das ich nicht herausfinden kann, wenn ich versuche, mein Programm zu erweitern. Ein weiteres Problem ist, dass ich keinen einfachen Testfall erstellen kann, da dies jedes Mal funktioniert, wenn ich es versuche. Es muss Komplikationen geben, die ich vermisse. Aber ich werde versuchen, die Situation so klar wie möglich zu beschreiben, falls sie jemandem bekannt vorkommt.

Ich habe eine Basisklasse namens Seed, die Teil der Hauptanwendung ist und vom System Classloader geladen wird. Ich habe ein Plugin, das eine Klasse Road enthält, die eine Unterklasse von Seed ist. Es wird zur Laufzeit aus einer separaten JAR-Datei geladen. Die Klasse Road verweist auf das Feld Seed.garden, das wie folgt definiert ist:

geschützter Garten Garten;

Beachten Sie, dass ich keine Kompilierungsfehler erhalte. Ich bekomme auch keine Laufzeitfehler, wenn die Plug-in-JAR im Systemklassenpfad enthalten ist. Nur wenn meine Hauptanwendung das Plugin mit einem neuen Klassenladeprogramm (das das Systemklassenladeprogramm als übergeordnetes Element hat) lädt, erhalte ich den Fehler. Der Fehler ist:

java.lang.IllegalAccessError: Es wurde versucht, über die Klasse package.Road $ 4 auf das Feld package.Seed.garden zuzugreifen

Es muss etwas damit zu tun haben, dass die Unterklasse von einem anderen Klassenladeprogramm als der Superklasse geladen wurde, aber ich kann keinen offiziellen Grund finden, warum das nicht funktionieren sollte. Wie gesagt, wenn ich versuche, das Problem mit einem einfachen Testfall zu reproduzieren (einschließlich der separaten Jars, Laden der Unterklasse mit einem anderen Klassenladeprogramm usw.), wird der Fehler nicht angezeigt.

Es ist auch unwahrscheinlich, dass ich gegen die Zugriffsregeln verstoße, da dies funktioniert, wenn die Klassen vom selben Klassenladeprogramm geladen werden und keine Kompilierungsfehler auftreten.

Ich habe keine Ideen mehr! Kennt jemand dieses Problem oder hat jemand Hinweise für mich, in welche Richtung ich schauen soll? Hilfe!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage