Java Classpath

Aus gegebenem Anlass mal wieder eine kleine Abhandlung zu einem Basic-Thema aus dem Javabereich.

Was ist der Classpath?

Im Classpath sind die Orte referenziert an denen nach bestimmten Java Klassen gesucht werden kann. Er kann per Commandline gesetzt werden oder je Aufruf individuell überlagert werden.

Kleines Beispiel:

package at.nullpointer.classpath

public class SimpleHello {

	public static void main(String[] args) {
		System.out.println("Hello nullpointerat");
	}
}

Wenn dieses Klasse kompilliert aus der Sicht eines Windows XP Systems in c:\tmp (mitsamt den Packageordnern versteht sich, also c:\tmp\at\nullpointer\classpath\SimpleHello.class)  liegt kann es mittels folgenden Aufrufen gestartet werden

  • Direkt aus dem Verzeichnis c:\tmp mit:
    java at.nullpointer.classpath.SimpleHello
  • Durch mitgeben des Classpathes beim Aufruf:
    java -classpath c:\tmp
    at.nullpointer.classpath.Simplehello
  • Durch vorheriges setzen des Classpathes:
    set CLASSPATH=c:\tmp
    java at.nullpointer.classpath.SimpleHello

Wozu brauchen wir dann den Classpath?

Erweitern wir obriges Beispiel etwas:

package at.nullpointer.classpath

import at.nullpointer.constants.Classpath;

public class SimpleHello {

	public static void main(String[] args) {
		System.out.println(Classpath.getText());
	}
}

Hier importieren wir eine zusätzliche Klasse um unserem SimpleHello einen Text zu entlocken. Wenn wir diese zusätzliche Klasse zB nur als Jar File library.jar zur Verfügung haben, das z.B. im Verzeichnis c:\tmp\lib liefern obige Aufrufe Fehler.

Per Classpath muss nun also die VM auf die zusätzliche Bibliothek hingewiesen werden, damit der Code korrekt ablaufen kann:

set CLASSPATH=C:\tmp;C:\tmp\lib\library.jar
java at.nullpointer.classpath.SimpleHello

Dabei ist darauf zu achten dass der volle Name bis zur Jar angegeben wird, eine Wildcard auf das lib verzeichnis selbst reicht nicht. Jars werden dabei behandelt wie normale Ordner, die sie in komprimierter Form ja auch darstellen.

Um mehrere Einträge zu separieren wird unter Windows das Semikolon (“ ; „) genutzt, unter Unix Systemen wie div. Linux und auch Mac OS X wird das Kolon dafür verwendet (“ : „).

Wichtig ist dabei die Reihenfolge der Importe, der Intepreter geht diese immer von vorne nach hinten druch um die gesuchten Klassen zu finden. Der Einsprungspunkt der im java Aufruf angesprochen wird sollte dabei an erster Stelle stehen, will man keine NoClassDefFoundError Exception erhalten.

Quelle: http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/classpath.html

Ähnliche Artikel:

TrayRSS ist nun Beta

Mein RSS Reader hat nun alle anfänglichen Anforderungen erfüllt und darf sich nun, nach 14 Monaten Alpha und somit reiner Entwicklung, stolz Beta betiteln. Original News hier.

Downloaden kann man die Beta unter folgendem Link.

TrayRSS ist ein in Java geschriebenes Programm, dass unter der GPL 3.0 veröffentlicht wurde. Es dient zur Überwachung von RSS Feeds. Es zeigt dem User periodisch auf welche Newseinträge er noch nicht gesehen hat. Dazu werden Notifications im linken unteren Bildschirmbereich dargestellt.

TrayRSS zielt dabei auf Nutzer ab die nur eine kleine Feedanzahl überwachen möchte, bei diesen aber sofort informiert werden möchte. Will der Nutzer den Feedeintrag lesen, wird dieser von TrayRSS im installierten Browser geöffnet.

Um Feedback wird gebeten ;)

Ähnliche Artikel:

TrayRSS goes Beta

Hello again,
it tooked a while but finally i’m glad to announce, that TrayRSS is now in Beta Stage. Within Version 0.7 all functions are implemented.

The main improvements are:
+ persistence
+ monitoring
+ timeframe validation

To read the complete changes take a look here

You can download TrayRSS 0.7 Beta here

I’m looking forward to receive some feedback ;)

Have fun

Ähnliche Artikel:

Dependency Injection in a nutshell

Durch Dependency Injection versucht man Abhängigkeiten zwischen zwei Komponenten zu minimieren. Wie Dependency Injection funktioniert sei hier anhand eines kleinen Beispiels illustriert:

dependency injection
dependency injection

Die Abhängigkeit ist im Client nur als Interface definiert. Von der Implementierung des Interfaces weiß der Client nichts. Um eine möglichst lose Kopplung an die Implementierung zu erreichen wird diese von einem externen Player, einem Assembler, wie z.B. Spring oder auch einem selbstgestrickten Player erst bei Erzeugung des Client Objektes zugewiesen. Somit ist der Client nur noch vom Interface abhängig, die exakte Implementierung geht ihn nichts an. Er ist somit unabhängig, was ihn weniger fehleranfällig macht und auch leichter testbar druch Unit-Tests (Stichwort: Mock Objects).

Ähnliche Artikel: