1. ホーム
  2. java

[解決済み] RuntimeでJARファイルを動的に読み込むには?

2022-03-16 13:33:44

質問

なぜJavaでは難しいのですか?もし、何らかのモジュールシステムを持ちたいのであれば、JARファイルを動的にロードできるようにする必要があります。それを実現する方法として、自分で ClassLoader しかし、私の考えでは、JARファイルを引数としてメソッドを呼び出すのと同じくらい簡単であるべきなのに、これは大変な作業です。

これを実現する簡単なコードで何かお勧めはありますか?

どのように解決するのですか?

難しい理由は、セキュリティです。 クラスローダーはイミュータブルであることが前提であり、実行時に気ままにクラスを追加することはできないはずです。 実際、システムのクラスローダーでそれが機能するのは非常に驚きです。 ここでは、独自の子クラスローダを作成する方法を紹介します。

URLClassLoader child = new URLClassLoader(
        new URL[] {myJar.toURI().toURL()},
        this.getClass().getClassLoader()
);
Class classToLoad = Class.forName("com.MyClass", true, child);
Method method = classToLoad.getDeclaredMethod("myMethod");
Object instance = classToLoad.newInstance();
Object result = method.invoke(instance);

痛いけど、そこそこ。