Lib zur laufzeit austauschen

TheLamer

Mitglied
Aloha,

Ich sitze hier gerade vor einem kleenen Problem, ich schreibe ein Programm welches ein anderes Programm Testet (beides sind Java Anwendung).

Da das zu testende Programm sehr kurze Release Zyklen hat, möchte ich die Jehweilige Version welche ich teste Per DateChooser auswählen.
Dieses JAR soll nun im Classpath vermerkt sein, und das TEST Programm greift auf die eben gewählte Version zu.


Momentan habe ich das so gelöst, dass ich die Jehweilige version im BuildPath setze. Dieses bringt ja allerdings einen Erheblichen Wartungsaufwand für das TEST TOOL mit, da ich jedesmal wenn eine neue Version des zu testenden Programmes rauskommt ich den BuildPath anpassen muss.


Vielen dank für eine schnelle Antwort.
 
....

Sooo nocheinmal für mich zum verständniss:


Ich Definiere den Pfad zum Lib File
URL url = new URL("file:foo.jar");

Ich Instanziiere den URL Classloader
URLClassLoader loader = new URLClassLoader (new URL[] {url});

Ich hole die Jehweilige Klasse aus dem Jar
Class cl = Class.forName ("de.xxx.routing.xxx.Class1", true, loader);

Ich Erstelle mit getInstance ein Objekt welches ich dann in den richtiegen typ Carste.
Class1 class = (Class1) cl.newInstance();

Muss das Jar noch im BuildParth hinterlegt sein?


Danke schonmal ....
 
Was heißt Buildpath für dich? Die Datei muss zur Laufzeit nicht im Classpath liegen, aber gegen alles gegen was du programmierst musst du natürlich auch compilieren können.
 
IMHO sind so manuelle ClassPathtricksereien ein Nest für potentielle Fehler, die nicht nur schwer zu debuggen sind, sonder auch noch recht unwillkürlich vorkommen. So ein JAR Austausch beinhalten ja nicht nur das Hinzufügen, sondern auch das Entfernen von Klassen. Was passiert mit Objekten, die diese Instanzen dieser Klasse sind? Was passiert mit Objekten, die Referenzen auf Instanzen dieser Klasse halten?

IMHO sollte man das Thema Dynamik in Javaanwendungen nicht unterschätzen und es so lang es geht umgehen (in vielen Fällen ist ein einfacher Neustart mit ausgetauschtem JAR der deutlich kontrolliertere Weg). Wenn es denn wirklich Dynamik braucht geht eigentlich kein Weg an OSGi vorbei, was eben dieses Problem auf bewährte Art und Weise löst, aber eine ganz andere Büchse der Pandora an Komplexität öffnet...

Just my €0,02...

REINHAUN!
 

Neue Beiträge

Zurück