{"id":3263,"date":"2015-12-19T14:26:21","date_gmt":"2015-12-19T12:26:21","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3263"},"modified":"2015-12-19T14:26:21","modified_gmt":"2015-12-19T12:26:21","slug":"setzen-java-klassenpfad-cp-classpath","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2015\/12\/setzen-java-klassenpfad-cp-classpath\/","title":{"rendered":"Setzen des Java Klassenpfades"},"content":{"rendered":"<p>Wo die JVM die Klassen findet muss ihr mitgeteilt werden, und das ist in der Praxis elementar f\u00fcr die Auslieferung, auch englisch Deloyment\u00a0genannt. Java wartet mit dem Laden der Klassen so lange, bis sie ben\u00f6tigt werden. Es gibt zum Beispiel Programmabl\u00e4ufe nur zu besonderen Bedingungen und wenn dann erst sp\u00e4t ein neuer Typ referenziert wird, der nicht vorhanden ist, f\u00e4llt dieser Fehler erst sehr sp\u00e4t auf. Der JVM m\u00fcssen folglich nicht nur die Quellen f\u00fcr Klassen und Ressourcen der eigenen Applikation mitgeteilt werden, sondern alle vom Programm referenzierten Typen aus zum Beispiel quelloffenen und kommerziellen Bibliotheken.<\/p>\n<p>Sollen in einem Java-Projekt Dateien aus einem Verzeichnis oder einem externen Java-Archiv geholt werden, so ist der \u00fcbliche Weg, diese Verzeichnisse oder Archive in einem Klassenpfad anzugeben. Diese Angabe ist f\u00fcr alle SDK-Werkzeuge notwendig \u2013 am H\u00e4ufigsten ist sie beim Compiler und bei der Laufzeitumgebung zu sehen.<\/p>\n<h4>Schalter -classpath<\/h4>\n<p>Die Suchorte lassen sich flexibel angeben, wobei die erste Variante einem SDK-Werkzeug \u00fcber den Schalter -classpath (kurz -cp) die Klassendateien bzw. Archive liefert:<\/p>\n<pre>$\u00a0java\u00a0-classpath\u00a0classpath1;classpath2\u00a0MainClass<\/pre>\n<p>Der Klassenpfad enth\u00e4lt Wurzelverzeichnisse der Pakete und JAR-Dateien, also Archive von Klassendateien und Ressourcen.<\/p>\n<p><strong>Beispiel:<\/strong>\u00a0Nimm ein Java-Archiv library.jar im aktuellen Verzeichnis, die Ressourcen unter dem bin-Verzeichnis und alle JAR-Dateien im Verzeichnis lib in den Klassenpfad mit auf:<\/p>\n<pre>$ java -cp <strong>\"library.jar<\/strong>;<strong>bin\/.<\/strong>;<strong>lib\/*\"<\/strong> com.tutego.MainClass<\/pre>\n<p>Unter Windows ist der Trenner ein Semikolon, unter Unix ein Doppelpunkt! Das Sternchen steht f\u00fcr <em>alle<\/em> JAR-Dateien, es ist <em>kein<\/em> \u00fcblicher Wildcard, wie z.B. parser*.jar.<a href=\"#_ftn1\" name=\"_ftnref1\">[1]<\/a> Sehen Kommandozeilen der Betriebssysteme ein *, beginnen sie in der Regel eine eigenen Verarbeitung; daher muss die gesamte Pfadangabe in doppelten Anf\u00fchrungszeichen stehen.<\/p>\n<h4>Umgebungsvariable CLASSPATH<\/h4>\n<p>Eine Alternative zum Schalter -cp ist das Setzen der Umgebungsvariablen CLASSPATH mit einer Zeichenfolge, die Pfadangaben spezifiziert:<\/p>\n<pre>$\u00a0SET\u00a0<strong>CLASSPATH=classpath1;classpath2<\/strong>\r\n$\u00a0java\u00a0MainClass<\/pre>\n<p>Problematisch ist der globale Charakter der Variablen, sodass lokale -cp-Angaben besser sind. Au\u00dferdem \u201e\u00fcberschreiben\u201c die -cp-Optionen die Eintr\u00e4ge in CLASSPATH. Zu guter Letzt: ist weder CLASSPATH noch eine -cp-Option gesetzt, besteht der Klassenpfad f\u00fcr die JVM nur aus dem aktuellen Verzeichnis, also \u201e.\u201c.<\/p>\n<p><a href=\"#_ftnref1\" name=\"_ftn1\">[1]<\/a> \u00a0\u00a0\u00a0\u00a0 Weitere Details unter https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/tools\/windows\/classpath.html.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wo die JVM die Klassen findet muss ihr mitgeteilt werden, und das ist in der Praxis elementar f\u00fcr die Auslieferung, auch englisch Deloyment\u00a0genannt. Java wartet mit dem Laden der Klassen so lange, bis sie ben\u00f6tigt werden. Es gibt zum Beispiel Programmabl\u00e4ufe nur zu besonderen Bedingungen und wenn dann erst sp\u00e4t ein neuer Typ referenziert wird, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-3263","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3263"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3263\/revisions"}],"predecessor-version":[{"id":3264,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3263\/revisions\/3264"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}