Wieso JAR entpacken - CLASSPATH ? Ich versteh das

Hallo Java-Profis:wink:

manchmal verstehe ich einfach die Java-Welt nicht mehr. Folgendes Problem. Beim Apache/JakarteProjekt gibt es einen HTTP-Client (der letztendlich sämtliche Funktionen zur Verfügung stellt umd die ganzen Internetprotokolle sehr einfach zu handhaben und ein voller HTPP-Client ist.(Sessionmanagment etc, was man mit den standard Java HTTP Methoden erst mühsam selbst zusammenprogrammieren müsste)
Das Projekt liegt als typisches JAR File vor.
„commons-httpclient-2.0-rc1.jar“

Zusätzlich braucht man wegen einer „Abhängigkeit/Dependency“ noch so ein weiteres Projekt, einen Logger:
„commons-logging.jar“

Normalerweise werfe ich die zwei JARs entweder in den CLASSPATH oder in das j2sdk/jre/lib/ext Directory.

ABER das funktioniert nicht!!

  1. Fehler (nach langem Probieren rausbekommen). Ich muss die JAR Files entpacken? (Nur dann geht das)
    Wieso??
    In dem lib Verzeichnis und auch sonst liegen doch die ganzen Classen auch immer als JARs vor. Auch in der Dokumentation steht davon nichts. Wieso muss ich die Entpacken? Der Witz ist doch dass man diese JARs eben gerade nciht entpacken muss und Java das für einen macht.

  2. Wenn ich eine Classe in dieses j2sdk/jre/lib/ext Directory werfe müsste die doch ganz automatisch gefunden werden! DAs steht so überall in allen Dokus von SUN. Das geht bei mir auch nicht, erst wenn ich dieses VErzeichnis in den CLASSPATH setze funktioniert das (und siehe oben, die JARs müssen zusätzlich noch entpackt sein). Das gibts doch auch nicht. Das ist doch absoluter Schwachsinn dieses Verzeichnis noch in den CLASSPATH setzen zu müssen.

Ich bin euch super dankbar für irgendwelche Tips und Erklärung. Ich versteh das einfach nicht:wink:

PS ich nutze Win XP Pro (Englisch)

Vielen Dank
Thomas

  1. Wenn ich eine Classe in dieses j2sdk/jre/lib/ext Directory
    werfe müsste die doch ganz automatisch gefunden werden! DAs
    steht so überall in allen Dokus von SUN. Das geht bei mir auch
    nicht, erst wenn ich dieses VErzeichnis in den CLASSPATH setze
    funktioniert das (und siehe oben, die JARs müssen zusätzlich

Wie sieht denn dein Classpath aus? Die .jars müssen darin direkt angegeben sein und nicht das Verzeichnis wo sie liegen…

Grüße
Bruno

Hallo Bruno,

vielen Dank für dein Posting.

Ich hab jetzt noch was weiteres rausgefunden. Und zwar wenn ich die JARs ins jre/lib/ext directory werfe werden die doch gefunden, aber _nur_ von JAVAC (also dem Compiler)! Somit funktioneirt das mit diesem Verzeichnis doch irgendwie.

Allerdings und das verstehe ich immer noch nicht, wenn ich dann das problemlos und fehlerfrei kompilierte Programm (die Klasse) aufrufe mit JAVA, dann bekomme ich Fehlermeldungen, dass Klassen fehlen.
Wenn ich nun die JARs entpacke und in den Klassenpfad setze dann funktionierts.
(In dem Programm/Klasse importiere ich mit dem import Statement ein paar dieser „externen“ Klassen.)
Wieso funktioniert das mit diesem jre/lib/ext verzeichnis beim Compilieren und dann nicht mehr beim Aufrufen des Programmes. Da müsste doch Java auch einfach diese Klassen finden, so wie das JAVAC auch tut.

Vielen Dank für den Tip! DAmit läßt sich tatsächlich da ent-JAR-en sparen. Das war ein großer Fehler, ich hatte nur den Pfad als solchen im CLASSPATH:wink:

Allerdings verstehe ich die Sache und auch Idee dahinter immer noch nicht, warum das so komplex ist. JAVA müsste doch die importierten Klassen so wie JAVAC auch einfach finden können. Welchen Sinn macht es, dass JAVAC die JARs in dem jre/lib/ext Verzeichnis findet, das normale JAVA diese dann aber nochmals im Classpath braucht? Ist das nicht total doppelt und umständlich?

Vielen Dank
Thomas

PS Viele Grüße an den Bodensee:wink: Hast du an der BA in Tettnang studiert, die kenne ich nämlich ein bisschen:wink:

Keine AHnung das lib/ext Verzeichnis habe ich noch nie benutzt udn ich glaube es ist auch nicht so gedacht, da alles reinzuhauen was man irgendwo brauchen könnte…

Grüße
Bruno

Ich hab jetzt noch was weiteres rausgefunden. Und zwar wenn
ich die JARs ins jre/lib/ext directory werfe werden die doch
gefunden, aber _nur_ von JAVAC (also dem Compiler)! Somit
funktioneirt das mit diesem Verzeichnis doch irgendwie.

Gibt es eventuell neben dem jdk1.x\jre-Pfad noch einen unter
Programme\JavaSoft\jre? Dann könnte es sein, dass dort auch ein
jre\lib\ext-Verzeichnis existiert.
Also ein JRE für’s JDK und ein JRE für’s JRE…

Hi.

Bist du dir sicher, dass du das „richtige“ java.exe verwendest? Es könnte nämlich durchaus sein, dass du das java.exe benutzt, welches bei winXP dabei ist. Und dieses schaut IMHO nicht im nachträglich installierten Java SDK - lib/ext-Verzeichnis nach.

Wenn das Teil richtig kompiliert (javac also die Klassen findet) und dann nicht richtig ausgeführt wird, liegt dieser Schluß nahe.

Behoben werden kann dieses Problem (falls es das ist), indem du in den Systemvariablen das Java/bin - Verzeichnis im Path vor das Windows-Root Verzeichnis verschiebst.

mfG,

J.P.Jarolim

Danke für eure Hilfe !
Bin erst jetzt dazugekommen das nochmals anzusehen. Genau das mit den „zwei“ Installationen des JRE/JDK’, war die Lösung des Problems!

Sprich das JRE wird (und das ohne zu Fragen!) in ein anderes VErzeichnis als das JDK bei der Installation kopiert. Nachdem ich mir schon bewusst war, dass mehrere (veraltete) JRE’s auf dem System waren habe ich die alle gelöscht und das aktuelleste JDK installiert.

Sehr fragwürdig und kritigfähig ist dabei, dass der Installer zwar nach einem Installationspfad fragt, dann dort aber nur das JDK ablegt. Das JRE wandert seltsamerweise ungefragt in das „Programme“ Verzeichnis. Da bin ich natürlich nicht draufgekommen, da ich ja eigentlich sicher war, dass der alles unter den angegebenen Installationspfad kopiert…

Jedenfalls vielen Dank für eure Hilfe!
Thomas