İnsanların kendi uygulamalarını yazmaları için soyut bir sınıf kullanmalarına izin veren bir uygulamam var. Bu uygulamaları bir dizinden .class-files olarak yüklerim. Ben bunları doğru yüklemek için sınıfları bulunmaktadır paketi belirtmeniz gerekir - Gördüğünüz gibiPaketleri belirtmeden sınıfları sınıftan yükle
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();
}
: Şu anda, bu çözümü var. paket atlama, bir
java.lang.NoClassDefFoundError:
MyClass (wrong name: org/mypackage/MyClass)
hatası alıyorum.
Şimdi, bir mimari POV'den, tasarlanan diğer insanların sınıflarını yüklerken MY paketine derlenmesi gerektiği çok kötü tasarlanmış olduğunu düşünüyorum.
Bu yüzden size soruyorum: Dosya sistemini, içerdikleri paketi belirtmek zorunda kalmadan bir dosya yükleyebilir miyim?
Paket yapısını yolunuzun altında bir klasör yapısı olarak tutabilirsiniz? Sınıfı yüklemeden önce paket adını yoldan oluşturun. –
Bu bir ihtimal olurdu ... En azından iki sınıf aynı ada sahip olduğunda kendimi sıkmak zorunda kalmayacaktım ... başka bir açıdan güzel düşünce! :) –
Deneyin ve işe yarayıp yaramadığını görün, eğer bazı kod örneklerini istiyorsanız bana bildirin! –