リフレクションを使用して、特定のクラスからすべてのメソッドを取得しています。
このクラスには、クラスパスにないクラスへの参照があるため、例外が発生します。
java.lang.NoClassDefFoundError:
これについて:
Method methods[] = theClass.getDeclaredMethods();
どういうわけか、クラスパスにないものをすべて「スキップ」することは可能ですか?
リフレクションを使用して、特定のクラスからすべてのメソッドを取得しています。
このクラスには、クラスパスにないクラスへの参照があるため、例外が発生します。
java.lang.NoClassDefFoundError:
これについて:
Method methods[] = theClass.getDeclaredMethods();
どういうわけか、クラスパスにないものをすべて「スキップ」することは可能ですか?
Class.forName()は、クラスパスにあるかどうかに関係なく、クラスをロードしません。すでにロードされているクラスへのハンドルのみを返します。
クラスは、主に次の2つの方法のいずれかで読み込まれます。
1.)クラスはインポートステートメントで参照されます(java.lang。*は自動的にインポートされるため、java.langパッケージのすべてのクラスは最初からクラスロードされます)
2.)ClassLoaderからの呼び出しを使用してクラスがロードされます。この場合、その依存関係はすべて解決されます。と同様にロード
したがって、クラスパスの外部、またはクラスパスの外部に依存関係があるクラスをロードしようとしている場合は、ClassLoaderをサブクラス化し、クラスとその依存関係をロードする方法を指示する必要があります。
ここでClassLoaderの仕様を参照してください:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html
また、ClassLoaderインスタンスをパスにポイントし、そのパスに任意のクラスをロードできるURL ClassLoaderなど、必要な処理を実行できるClassLoaderの既製のサブクラスがあります。