Externe Jar Dateien benutzen

holtiwilan

Mitglied
Hallo Forum.

Ich habe folgendes Problem. Ich habe eine Jar Datei mit selbst geschriebenen Klassen und die Oracle JDBC als Jar.
Nun habe ich Projekt geschrieben, das beide Jars benutzt.
Wenn ich aus diesem Projekt (ols) eine Jar erstelle und starte bekomme ich immer:
java.lang.NoClassDefFoundError: esf/EsfComboBox

Ich habe in dem Verzeichnis, von dem aus ich das jar aufrufe beide externen jars liegen:

esf.jar
ojdbc.jar

-classpath wird ja beim ausführen von jar Dateien ignoriert.
Auch ein eintrag in die Manifestdatei von ols hat nichts geholfen:

Code:
Manifest-Version: 1.0
Main-Class: ols.Appl

Class-Path: esf.jar ojdbc14.jar

Die ols Jar Datei erstelle wich wie folgt:
Code:
jar cvfm ols.jar manifest.mf ols\*.*

Könnt Ihr mir helfen?

Vielen Dank

Tim
 
Hat sich erledigt.
Ich habe folgendes gefunden:

Code:
package ols;

import java.lang.reflect.*;
import java.io.*;
import java.net.*;

/**
 * <p>Title: ClassPathController</p>
 *
 * <p>Description: Adding files to the ClassPath</p>
 *
 * $Revision: $
 * $Log: $
 */

public class ClassPathController {

	private static final Class[] parameters = new Class[] { URL.class };

	public static void addFile(String s) throws IOException {
		File f = new File(s);
		addFile(f);
	}//end method

	public static void addFile(File f) throws IOException {
		addURL(f.toURL());
	}//end method

	public static void addURL(URL u) throws IOException {

		URLClassLoader sysloader = (URLClassLoader) ClassLoader
				.getSystemClassLoader();
		Class sysclass = URLClassLoader.class;

		try {
			Method method = sysclass.getDeclaredMethod("addURL", parameters);
			method.setAccessible(true);
			method.invoke(sysloader, new Object[] { u });
			System.out.println("added " + u.toString() + " to Classpath");
		} catch (Throwable t) {
			t.printStackTrace();
			throw new IOException(
					"Error, could not add URL to system classloader");
		}//end try catch

	}//end method

}//end class

Dann mache ich in der zu startenden Klasse folgendes:

Code:
public Application() {
    	try {
			ClassPathController.addFile(new File ("esf.jar"));
			ClassPathController.addFile(new File ("ojdbc14.jar"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	EntryForm frame = new EntryForm();
        // Frames überprüfen, die voreingestellte Größe haben
        // Frames packen, die nutzbare bevorzugte Größeninformationen enthalten, z.B. aus ihrem Layout
        if (packFrame) {
            frame.pack();
        } else {
            frame.validate();
        }
 
Zurück