2016-04-21 5 views
0

Ist es möglich, zusätzliche Bibliotheken zu laden, nachdem das jar erstellt wurde? Ich möchte einen Ordner für JAR-Dateien durchsuchen und sie als Bibliotheken laden. "Sie" werden eine Klasse erweitern, die ich bereits habe, damit ich sie ansprechen kann. Der Ordner der libs ist nicht der gleiche wie der Ordner, in dem sich die JAR-Datei befindet, die alle anderen lädt. Wenn es keine andere Möglichkeit, als ein Setting zu ändern (wo die Bibliotheken-to-be-loaded verbunden sind) withinin das Glas selbst, die nicht groß sein würde, aber hilfreich, auch;)Beliebige Bibliotheken von einem beliebigen Speicherort nach dem Export laden

Dank

Simon

Antwort

1

Ja ist es. Sie müssen nur URLClassLoader verwenden.

URLClassLoader loader = new URLClassLoader(new URL[]{new URL("jar:file:/home/myapp/plugins/dateplugin.jar!/")}, ClassLoader.getSystemClassLoader()); 
MyInterface pluginClass = (MyInterface)loader.loadClass("com.mypackage.MyClass").newinstance(); 

URLClassLoader Java Doc

Sie wollen sicherstellen, dass Sie Ihre Klassenlader mit dem Haupt eine Verbindung durch das System Classloader den Konstruktor übergeben. Dadurch können Sie Ihre neu geladene Bibliothek einer vorhandenen Schnittstelle zuweisen. So können Sie ein Plugin-System für Ihr Spiel oder Ihre Anwendung erstellen.

Hier ist ein Link zum Quellcode, der dies in Aktion zeigt: Git Hub Repository for Sticky. Schau dir die Klasse sticky.gui.Main an. Es zeigt an, dass das Plugin-System neue Bibliotheken lädt, nachdem es bereits gestartet wurde.

+0

Danke, genau das, was ich gesucht habe;) – Simon

+0

@ 0815Creeper Kein Problem. Bitte markieren Sie die Antwort als akzeptiert. Ich habe auch einen Code, der das tut, den ich auf GitHub setzen werde, also schau später zurück und ich werde den Link hinzufügen. – markbernard

+0

@ 0815Creeper Einen Link zu einem Beispielcode veröffentlicht. – markbernard