抽象クラスを使用して、独自の実装を記述できるアプリケーションがあります。これらの実装をディレクトリから.class-filesとしてロードします。私はそれらを正しくロードするためにクラスがに配置されているパッケージを指定する必要があります - あなたが見たようパッケージを指定せずにフォルダからクラスをロードする
File classDir = new File("https://stackoverflow.com/users/myproject/classes/");
URL[] url = { classDir.toURI().toURL() };
URLClassLoader urlLoader = new URLClassLoader(url);
String filename;
for (File file : classDir.listFiles()) {
filename = string.getFilenameWithoutExtension(file);
if (filename.equals(".") || filename.equals("..") || filename.startsWith("."))
continue;
AbstractClass instance = (AbstractClass)urlLoader
.loadClass("org.mypackage." + filename)
.getConstructor(ConfigUtil.class, DatabaseUtil.class, StringUtil.class)
.newInstance(config, database, string));
instance.doSomething();
}
:現在、私はこのソリューションを持っています。パッケージを省略すると、私は
java.lang.NoClassDefFoundError:
MyClass (wrong name: org/mypackage/MyClass)
エラーが発生します。
今は建築POVから、他の人が設計したクラスをロードするときにMYパッケージにコンパイルする必要があることは非常にうまく設計されていないと思います。
私はあなたに質問します:ファイルシステムからクラスをロードする方法はありますか?
パスの下にパッケージ構造をフォルダ構造として保持できますか?クラスをロードする前にパスからパッケージ名を作成しますか? –
それは可能性があります...少なくとも2つのクラスが同じ名前を持っていれば、私は自分自身に悩まされる必要はありません。 :) –
いくつかのコード例が私に教えてくれればそれを試してみてください! –