Java - Zugriff nur mit CLASSPATH ?

Tabkas

Mitglied
Schönen guten Tag ,

Ich habe folgende Frage, die sich beim Lesen eines Skriptes zu Java ergeben hat.

"damit [beim Kompellieren mit Javac.exe] die Klasse mit ihren Methoden verfügbar ist, muss die Datei entweder im aktuellen Verzeichnis liegen oder über die CLASSPATH-Umgebungsvariable auffindbar sein"

Nun: Ist das mit allen Dateien so? zB txt-Dateien? Müssen die auch im aktuellen Verzeichnis liegen oder in der classpath-umgebungsvariable?
Oder ist das nur bei .class wenn man die Methoden/Felder dort benutzen möchte?

Oder ganz allgemein: Bei welchen Daten muss es im aktuellen Verzeichnis liegen (oder Umgebungsvariable) um mit Java dort zugreifen zu können, und bei welchen nicht?
Und wieso ist das so ?

Vielen Dank
 
Nur Klassen, die Java selbst finden soll, müssen über den classpath verfügbar sein.

Das ist so, damit sie gefunden werden können, es kann ja schlecht der ganze Rechner nach Klassen abgesucht werden 😉
Alles, was du aber selbst lädst, kann irgendwo liegen - du musst halt nur wissen, die du dran kommst.
 
Also in beispielsweise textdateien kann ich stets schreiben, egal wo sie liegen (bzw sie lesen)?

Und was meinst du mit Java selbst?
JVM (zB java.exe) oder Compiler (zB javac.exe)?

Vielen Dank dir!!
 
"Das ist so, damit sie gefunden werden können, es kann ja schlecht der ganze Rechner nach Klassen abgesucht werden
Alles, was du aber selbst lädst, kann irgendwo liegen - du musst halt nur wissen, die du dran kommst."

Achso, weil man im Quellcode beim Aufruf einer fremden Klasse nicht den Speicherort der Klasse angibt?

Beim lesen einer txt tut man das ja doch. Würde Sinn ergeben auf diese Weise.
 
Nein, man stellt eben keine Umgebungsvariable ein, sondern gibt den Pfad direkt beim Aufruf von java(c) mit Hilfe eines Schalters (-cp) an.

Beispiel:
Java:
java -cp . Test
Würde bedeuten, dass das aktuelle Verzeichnis sich im Classpath befinden soll. Die Unsitte, die Umgebungsvariablen am System anzupassen, findet man nur noch vereinzelt.
 
Ja, die ganzen Aufrufe wären recht aufwändig.

Aus dem Grund wurden die ganzen Build-Tools entwickelt. Statt also da von Hand irgendwas aufzurufen hat irgendwelche Build Tools. Sei es, dass eine IDE selbst etwas mit bringt oder dass ein externes Build Tool verwendet wird. Build Tools für Java kenne ich Ant, Gradle und Maven.

Vorteil ist, dass hier halt auch gleich viel mehr gemacht wird. Das reine compilieren ist nur ein Schritt:
- Es werden evtl. spezielle Files erstellt (.jar oder .war oder was auch immer. Kann also auch ein fertiges Docker Image sein!)
- Es werden Vorarbeiten erledigt (Also z.B. Abhängigkeiten herunter geladen)
- Es kann ganz viel gemacht werden (Es kann also auch andere Tasks geben, wie eine Bereinigung oder so)

"Das ist so, damit sie gefunden werden können, es kann ja schlecht der ganze Rechner nach Klassen abgesucht werden
Alles, was du aber selbst lädst, kann irgendwo liegen - du musst halt nur wissen, die du dran kommst."

Achso, weil man im Quellcode beim Aufruf einer fremden Klasse nicht den Speicherort der Klasse angibt?

Beim lesen einer txt tut man das ja doch. Würde Sinn ergeben auf diese Weise.
Und wenn der Pfad fest angegeben würde, dann bekommst Du Probleme, sobald der Pfad von Rechner zu Rechner unterschiedlich ist ....
 

Neue Themen


Zurück
Oben