.jar Dateine aus einem Ordner laden (Java 16)

Tobero

Mitglied
Ist es möglich in 16 .ja Dateien zu laden und eine Funktion aus einer Klasse darin aufzurufen?
Alles was ich gefunden habe funktioniert nur in java 7 /8.
 
Ja, das sollte ebenso gehen.

Wenn etwas nicht geht, dann liegt es ab Java 9 aufwärts in der Regel am Modul-System. Da wäre aber einfach nur wichtig zu wissen, was Du genau wie probiert hast und was für Fehler du bekommen hast.
 
Habe jetzt etwas gefunden was zu funktionieren scheint.
Java:
public C LoadClass(String directory, String classpath, Class<C> parentClass) throws ClassNotFoundException {
        File pluginsDir = new File(directory);

        for (File jar : pluginsDir.listFiles()) {
            try {
                ClassLoader loader = URLClassLoader.newInstance(
                        new URL[] { jar.toURL() },
                        getClass().getClassLoader()
                );
                Class<?> clazz = Class.forName(classpath, true, loader);
                Class<? extends C> newClass = clazz.asSubclass(parentClass);
                // Apparently its bad to use Class.newInstance, so we use
                // newClass.getConstructor() instead
                Constructor<? extends C> constructor = newClass.getConstructor();
                return constructor.newInstance();

            } catch (ClassNotFoundException e) {
                // There might be multiple JARs in the directory,
                // so keep looking
                continue;
            } catch (MalformedURLException | IllegalAccessException | NoSuchMethodException | InvocationTargetException | InstantiationException e) {
                e.printStackTrace();
            }
        }
        throw new ClassNotFoundException("Class " + classpath
                + " wasn't found in directory " + System.getProperty("user.dir") + directory);
    }
 
Ach so; ja die schlechten Lösungen die nicht öffentliche APIs nutzen funktionieren irgendwann nicht mehr, dass war aber auch von Anfang an absehbar...
 

Neue Themen


Zurück
Oben