Eclipse RCP Applikation: Dynamisch .jar Libaries laden

r3zn1k

Grünschnabel
Guten Tag

Ich wusste nicht in welches Unterforum ich mit diesem Thread hinsollte, darum poste ich es einfach mal hier

Das man die JAR-Dateien im "manifest.mf" unter Bundle-ClassPath angeben kann weiss ich. Jedoch habe ich das Problem das ich weder die Anzahl noch den Namen der JAR-Dateien kenne.

Ich kenne lediglich Verzeichnis, in dem sich die Libraries befinden.
Ich möchte alle diese Libraries aus diesem Verzeichnis in einem Plugin laden, um sie über Wrapper-Klassen anderen Plugins zur verfügung stellen zu können.

Nun lautet meine Frage:
Wie kann ich alle Libraries aus einem Verzeichnis laden, damit sie das Plugin, in dem sie geladen werden, kennt?

Vielen Dank für eure Hilfe!
 
Über einen URLClassLoader würde das gehen. Ich weiß aber natürlich nicht genau was du vorhast.
 
Das habe ich auch schon probiert. Bis jetzt bin ich jedoch erst soweit:

Code:
	protected static void loadClasses() {
		File libDir = getLibDir();
		if (libDir == null)
			return;
		
		ArrayList<URL> urls = new ArrayList<URL>();
		for (String file : libDir.list()) {
			if (file.endsWith(".jar")) {
				try {
					urls.add(new URL("jar", "", "file:" + new File(file).getAbsolutePath() + "!/"));
				} catch (MalformedURLException e) {
					Logger.getLogger(Test.class).error("Couldn't add " + file + " to the library-list", e);
				}
			}
		}

		URLClassLoader classLoader = URLClassLoader.newInstance(urls.toArray(new URL[] {}));	
		
		String clazz = "xxx.AnyClass";
		try {
			classLoader.loadClass(clazz);
		} catch (ClassNotFoundException e) {
			Logger.getLogger(Test.class).error("Couldn't load class " + clazz, e);
		}
		
	}

classLoader.loadClass(clazz) wirft eine java.lang.ClassNotFoundException.
 
Was halt grundsätzlich suspekt ist, dass du Eclipse RCP (und damit einen OSGi Container) benutzt und dann irgendwelchen Classloaderfoo machen willst. IMHO ist es an der Stelle Zeit, nen Schritt zurück zu machen und zu überlegen, was das eigentlich Ziel ist, was du erreichen willst. Warum willst du beliebige JAR's laden? Warum nutzt du nicht das Extenderpattern um beim deployen eines Bundles in den OSGi Container darauf zu reagieren.

Grundsätzlich: was hast du vor? :)

Gruß
Ollie
 
Hallo,

Was halt grundsätzlich suspekt ist, dass du Eclipse RCP (und damit einen OSGi Container) benutzt und dann irgendwelchen Classloaderfoo machen willst. IMHO ist es an der Stelle Zeit, nen Schritt zurück zu machen und zu überlegen, was das eigentlich Ziel ist, was du erreichen willst. Warum willst du beliebige JAR's laden? Warum nutzt du nicht das Extenderpattern um beim deployen eines Bundles in den OSGi Container darauf zu reagieren.

So abwegig ist das IMHO nicht. Stell dir doch nur mal vor du baust einen generischen Datenbank-Client als Eclipse RCP Anwendung. Dort willst du dann vielleicht die JDBC Treiber jars dynamisch in der Anwendung angeben können.

Gruß Tom
 
Das ist durchaus richtig. Aber die initiale Aussage war, einen Ordner voll JARs laden zu wollen, was für mich nach einer Art Pluginsystem klingt. Da aber mit OSGi schon eines da ist, glaub ich dass es sinn machen kann, wie man genau das darüber abbildet. Ob das jetzt wirklich so ist, hängt davon ab, was r3zn1k genau vorhat, deswegen meine Frage.

REINHAUN!
 
Wie sieht es denn aktuell in der Thematik aus? Hab nämlich ein ähnliches Problem.
@r3zn1k: Hast du das Problem jetzt gelöst oder wie schauts aus?
 

Neue Beiträge

Zurück