Java では、ClassLoader を使用して、既にロードされているクラスのリストとそれらのクラスのパッケージを取得できます。しかし、ロードできるクラス、つまりクラスパス上にあるクラスのリストを取得するにはどうすればよいでしょうか? パッケージも同様。
これはコンパイラ用です。foo.bar.Baz を解析するとき、foo が他のものと区別するためにパッケージであるかどうかを知りたいです。
Java では、ClassLoader を使用して、既にロードされているクラスのリストとそれらのクラスのパッケージを取得できます。しかし、ロードできるクラス、つまりクラスパス上にあるクラスのリストを取得するにはどうすればよいでしょうか? パッケージも同様。
これはコンパイラ用です。foo.bar.Baz を解析するとき、foo が他のものと区別するためにパッケージであるかどうかを知りたいです。
org.reflections ライブラリは、あなたが望むことを行うべきだと思います。クラスパスをスキャンし、たとえば、すべてのクラスまたは特定のスーパータイプを拡張するクラスのみを取得できます。そこから、利用可能なすべてのパッケージを取得できるはずです。
私はその答えを自分で探しましたが、それは不可能です。
私が知っている唯一の方法は、特定のディレクトリにロードできるすべてのクラスがあり、.class で終わるファイルの名前を検索することです。
その後、Class.forName(name_of_class_file).createInstance()
それらのファイル名で行うことができます。