プログラムをプラグインしようとしたときにポップアップしたものがわからないという奇妙な問題があります。追加の問題は、試してみるたびに機能するため、簡単なテストケースを作成できないことです。私が見逃しているいくつかの合併症があるに違いありません。ただし、誰かに馴染みがあるように思われる場合に備えて、状況をできるだけ明確に説明するようにします。
メインアプリケーションの一部であり、システムクラスローダーによってロードされるSeedという基本クラスがあります。SeedのサブクラスであるクラスRoadを含むプラグインがあります。実行時に別のjarファイルからロードされます。クラスRoadは、次のように定義されているフィールドSeed.gardenを参照します。
保護された最終的な庭の庭;
コンパイルエラーが発生しないことに注意してください。プラグインjarがシステムクラスパスに含まれている場合も、ランタイムエラーは発生しません。メインアプリケーションが新しいクラスローダー(親としてシステムクラスローダーを持つ)を使用してプラグインをロードした場合にのみ、エラーが発生します。エラーは次のとおりです。
java.lang.IllegalAccessError:クラスpackage.Road$4からフィールドpackage.Seed.gardenにアクセスしようとしました
サブクラスがスーパークラスとは異なるクラスローダーによってロードされているという事実と関係があるはずですが、それが機能しない公式の理由は見つかりません。また、私が言ったように、単純なテストケース(個別のjar、別のクラスローダーでのサブクラスのロードなどを含む)で問題を再現しようとしても、エラーは発生しません。
また、クラスが同じクラスローダーによってロードされたときに機能し、コンパイルエラーが発生しないため、アクセスルールに違反している可能性は低いようです。
アイデアが足りません!誰かがこの問題を認識していますか、または私が見るべき方向へのいくつかの指針を持っていますか?ヘルプ!