Klassenpfad mal anders - dynamisches Laden einer Klasse

Status
Nicht offen für weitere Antworten.

reibi

Top Contributor
Hallo

das Leidige Thema Klassenpfad hat sich ja für die meisten seit Benutzung von Eclipse verabschiedet. Aber ich hab noch mal was:

Zur Einfachheit halber erklär ich mein Problem mal mit dem Laden eines Datenbanktreibers:

Also ich hab ein Programm was "prg.jar" heisst. Das ruft man normalerweise so auf:

Code:
java  -Ds=DasProgramm -jar prg.jar

Nun will ich aber ein Datenbanktreiber laden. Je nach dem welche Datenbank benutzt wird, kann ein anderer Treiber benutzt werden.

So:

1.) Wenn nich diesen Treiber nun in den Klassenpfad eintrage geht das nicht mehr. Er zieht den Klassenpfad NICHT an.

Code:
java -cp "driver-mysql.jar" -Ds=Test -jar prg.jar

Wenn diese Variante funktionieren würde, wäre das die allerbeste Möglichkeit!

Das hier geht alles:


2.)
Ich kann den relativen Pfad des Treibers in das Manifest des Hauptprogramms schreiben. Dazu muss ich aber das "prg.jar" editieren. Is also für Anwender, die nicht programmierer sind ungebräuchlich.


3.)
Code:
java -cp "driver-mysql.jar .. main.jar" -Ds=Test HauptProgramm.main

Das ist aber Mist, weil man dann Auf die Klasse referenzieren muss, die mit gleichem Namen mehrfach vorkommen kann ... Und nochwas ... es sieht Sch... aus!

4.) Ich kann Variante 2 verwenden, d.h. im manifest steht ein relativer Pfad zu z.B "lib/treiber.jar", und das jeweilige JAR-File einfach in "treiber.jar" umbenamsen.

Das ist aber nicht die feine Art und ich hab einen höheren Anspruch

5.) Das möchte ich nun gerne wissen

oder ne Möglichkeit womit ich Variante 1 zum fliegen bekomme. Also ne Möglichkeit wie man das jar-File direkt aufruft aber trotzdem so frei ist dynamisch eine Klasse zu laden.


Das mit dem dynamischen Klassen laden ist zwar ne feine Sache, aber das muss schon sauber ablaufen!

Oder gibts ne Möglichkeit, das Manifest für n jarfile ausserhalb des jarfiles aufzubewahren und so editierbar zu machen?

Danke und Gruss an Alle ;-)
 

Wildcard

Top Contributor
Wie du richtig erkannt hast, kannst du bei -jar keinen Classpath mehr angeben.
Zusätzlich zu deinen oben genannten Möglichkeiten kann ich dann noch Java Webstart und ein OSGi Framework in den Raum werfen.
 

reibi

Top Contributor
Nee ... es handelt sich dabei nicht um ein GUI sondern um einen sozusagen unsichtbaren Prozess, welcher auf einen Server läuft

huhu
 

FArt

Top Contributor
In der Regel wird das Problem gelöst, indem man nicht java startet, sondern ein Skript.

Unter allen mir bekannten udn gebräuchlichen BS ist es möglich, den Klassenpfad zur Laufzeit zusammenbauen zu lassen (z.B. nimm alle JARs aus dem lib Verzeichnis). Ausserdem hat man dann die Möglichkeit, noch mehr Konfigurationen (übersichtlich) vorzunehmen.

Nachteil: man braucht für jede Plattform ein Skript. Das ist aber eher kein großer Nachteil. Wenn das stört, könnte man das auch über ANT lösen (generisches Skript zum starten, Logik plattformunabhängig im ANT File).

Mit Javamitteln würde es auch gehen: führe einen eigenen ClassLoader (URLClassLoader) und setze den dann als ContextClassLoader. Das ist aber nicht ganz trivial, Beispiele sollten aber auch im Netz zu finden sein.

Grüße,
Bernd

P.S.: gutes Posting, kommt heutzutage leider nicht so oft vor...
 

kleiner_held

Top Contributor
Ich nutze fuer sowas meistens:
Code:
java -Djava.ext.dirs=lib -jar lib\jar-mit-main.jar
Im lib ordner liegen dann alle benoetigten jars.
 
T

tuxedo

Gast
Hätte ich jetzt auch so gemacht. Und so machen es auch viele andere Programme.

- Alex
 

reibi

Top Contributor
Hallo kleiner Held

super ist das ... funktioniert besser als ich dachte ;-) freu, freu :)

Im Endeffekt suche ich so ne Lösung schon sehr lange.

Gruss auch nach Neckarbischofsheim ;-)
 
T

tuxedo

Gast
Wie? Seit wann ist N'b'heim in Leipzig bekannt? *grübel* Hab ich was verpasst? Oder war da jemand bei Denic?

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Primitive Datentypen - Klassenpfad auflösen? Allgemeine Java-Themen 6
B Input/Output version.cfg konnte nicht im Klassenpfad gefunden werden, ist aber dort. Allgemeine Java-Themen 0
reibi Aktuelles Verzeichnis in den Klassenpfad nehmen Allgemeine Java-Themen 9
reibi Klassenpfad für jar-Files Allgemeine Java-Themen 7
I Neue Klassenbibliothek in Klassenpfad einbinden Allgemeine Java-Themen 3
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
M liste von listen anders ausgeben Allgemeine Java-Themen 1
O RSA (JCE) anders als RSA in C ? Allgemeine Java-Themen 6
U Math.Random anders verteilen Allgemeine Java-Themen 4
X Websiten auslesen, Browser stellt Links anders da. Allgemeine Java-Themen 10
G experten gefragt? regx oder irgendwie anders . Allgemeine Java-Themen 3
L UnsatisfiedLinkError mal anders Allgemeine Java-Themen 4
A Warum verhält sich a+=b anders als a=a+b? Allgemeine Java-Themen 5
A StringTokenizer oder doch anders? Formelinterpretieren. Allgemeine Java-Themen 4
D gewisse Zeichen sind nach dem entschlüsseln anders Allgemeine Java-Themen 2
M ArrayIndexOutOfBounds! Wie gehts anders? Allgemeine Java-Themen 10
S ein taschenrechner, aber etwas anders. Allgemeine Java-Themen 2
8 Was ist denn jetzt anders? Allgemeine Java-Themen 3
J Unterschied: Polymorphie und Dynamisches Binden Allgemeine Java-Themen 8
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
N Eclipse Dynamisches-Web-Project auf anderen Rechner transportieren Allgemeine Java-Themen 5
looparda Dynamisches Konsolenprogramm Allgemeine Java-Themen 3
T Dynamisches p:graphicimage im Datagrid Allgemeine Java-Themen 7
C Dynamisches und sortiertes Auslesen von Properties Allgemeine Java-Themen 2
P Dynamisches Binden Allgemeine Java-Themen 7
X Dynamisches hinzufügen von Panles Allgemeine Java-Themen 4
A Dynamisches Enum? Allgemeine Java-Themen 2
S dynamisches Array für Primfaktorzerlegung Allgemeine Java-Themen 13
S Dynamisches Manipulieren/Laden von Klassen Allgemeine Java-Themen 4
Z Dynamisches JPanel Allgemeine Java-Themen 10
hdi Dynamisches Instantiieren (Reflections) Allgemeine Java-Themen 4
H2SO3- dynamisches anlegen der dimensionaltität eines arrays Allgemeine Java-Themen 6
lumo "Exzessiv" dynamisches generieren Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
R Dynamisches Laden von JNI-Bibliotheken Allgemeine Java-Themen 4
N Mehrdimensionales dynamisches Array Allgemeine Java-Themen 3
T Dynamisches laden von java Klassen Allgemeine Java-Themen 2
B Dynamisches Linken Allgemeine Java-Themen 15
M Dynamisches ausführen von methoden unbekannter klassen Allgemeine Java-Themen 6
V dynamisches laden von klassen Allgemeine Java-Themen 8
C Dynamisches Nachladen von JARs (Plugin) Allgemeine Java-Themen 3
S Dynamisches Casten Allgemeine Java-Themen 5
M Statisches und dynamisches Binden? Allgemeine Java-Themen 2
S Dynamisches Feld generieren. Allgemeine Java-Themen 10
E Dynamisches Instanziieren Allgemeine Java-Themen 2
B dynamisches Laden aller Klassen in einem Ordner ?? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben