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 ?
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.
"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.
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.