Hey,
ich habe angefangen, ein Pluginsystem in Java zu schreiben. Es soll ähnlich fungieren wie das von Bukkit.
So habe ich mir ein paar Internetseiten gesucht, die mir erklären wie das geht. Doch wenn ich es versuche gibt es folgendes Problem.
Hier der Loader
public class AddonLoader implements KObject
{
/**
* Scans for addons, which are stored in the directory given.
*
* @param directory given, where to search for the apis.
*/
public void scan(File directory)
{
if (!directory.getJavaFile().isDirectory())
{
if (!directory.getJavaFile().delete() || !directory.getJavaFile().mkdir())
{
log("An error occurred when creating the directory of the apis. Try creating it manually (" + directory.getJavaFile().getAbsolutePath() + ")", null);
return;
}
}
Stream.of(Objects.requireNonNull(directory.getJavaFile().listFiles((dir, name) -> name.toLowerCase().endsWith("jar")))).forEach(this::load);
}
/**
* Loads a file and adds them to the system class loader.
*
* @param file The file to add.
*/
@SneakyThrows private void load(java.io.File file)
{
JarFile jarFile = new JarFile(file);
Manifest manifest = jarFile.getManifest();
AddonDescription addonDescription = new AddonDescription() {
@Override public String getName()
{
return manifest.getMainAttributes().getValue("Plugin-Name");
}
@Override public String getAuthor()
{
return manifest.getMainAttributes().getValue("Built-By");
}
@Override public String getDescription()
{
return manifest.getMainAttributes().getValue("Plugin-Description");
}
@Override public String getVersion()
{
return manifest.getMainAttributes().getValue("Plugin-Version");
}
};
if(addonDescription.getName() == null || addonDescription.getVersion() == null)
{
log("Not readable API detected. (" + file.getAbsolutePath() + ")", null);
}
Package jarPackage = new PackageCore("", jarFile);
AddonClassLoader addonClassLoader = new AddonClassLoader(file, addonDescription);
jarPackage.getUnsafeClasses().forEach(clazz ->
{
try
{
addonClassLoader.loadClass(clazz);
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
});
}
}
Wenn ich nun die Klasse lade, kommt
ClassNotFoundException
bei Klassen die aus dem Host stammen.
Hoffe ich habe es verständlich erklärt und jemand hat eine Ahnung, wie das zu beheben ist.
MfG MübenRübe