# log4j "installieren"



## Wang (19. Feb 2011)

Hallo,

ich wollte erstmals log4j benutzen, aber wenn ich den folgenden Code compilieren möchte, geht das nicht:


```
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;

public class Hello
{
	private static final Logger logger = Logger.getLogger(Hello.class);
	
	public static void main(String argv[])
	{
		BasicConfigurator.configure();
		logger.debug("Hello world.");
		logger.info("What a beatiful day.");
	}
}
```

Die Fehlermeldung:



> Hello.java:1: package org.apache.log4j does not exist
> import org.apache.log4j.Logger;
> ^
> Hello.java:2: package org.apache.log4j does not exist
> ...




Ich verwende Windows 7 und ich glaube es liegt daran, dass das mit der Umgebungsvariable nicht geklappt hat. Unter PATH hab ich dort an das Ende der Zeile "C:\Users\Mustermann\Desktop\apache-log4j-1.2.16" (ohne "") eingefügt, gespeichert und neugestartet.

Weiß vielleicht jemand, wie sich das Problem lösen lässt?

Thanks!

Gruß
Wang


----------



## XHelp (19. Feb 2011)

Aus der PATH-Variable kann das weg. Das ist eine andere geschichte. "classpath" ist das Stichwort was du brauchst.


----------



## Wang (19. Feb 2011)

XHelp hat gesagt.:


> Aus der PATH-Variable kann das weg. Das ist eine andere geschichte. "classpath" ist das Stichwort was du brauchst.




Heißt das unter Umgebungsvariablen -> Systemvariablen eine neue Variable "CLASSPATH" erstellen und dann den Wert "C:\Users\Mustermann\Desktop\apache-log4j-1.2.16" (ohne "") eintragen?

Falls nicht, dann stehe ich gerade total auf dem Schlauch...


----------



## XHelp (19. Feb 2011)

Ne, du musst schon die jar's angeben und nicht einfach das Verzeichnis. Entweder über classpath-Variable oder über sourcepath Parameter von javac


----------



## Murray (19. Feb 2011)

XHelp hat gesagt.:


> Ne, du musst schon die jar's angeben und nicht einfach das Verzeichnis. Entweder über classpath-Variable oder über sourcepath Parameter von javac



Mit dem _*-sourcepath*_-Parameter sagt man dem Compiler, wo er Quelltexte suchen soll. Das hilft hier nicht weiter, weil man log4J ja nicht übersetzen will. Richtig wäre _*-classpath*_ oder abgekürzt auch _*-cp*_


----------



## Wang (19. Feb 2011)

XHelp hat gesagt.:


> Ne, du musst schon die jar's angeben und nicht einfach das Verzeichnis. Entweder über classpath-Variable oder über sourcepath Parameter von javac



Okay, ich habe jetzt eine Systemvariable "CLASSPATH" erstellt und dort als Wert "C:\Users\Mustermann\Desktop\apache-log4j-1.2.16\log4j-1.2.16.jar" gespeichert.
Der Code lässt sich jetzt immerhin kompilieren, dafür lässt sich das Programm nicht starten:



> Exception in thread "main" java.lang.NoClassDefFoundError: Hello
> Caused by: java.lang.ClassNotFoundException: Hello
> at java.net.URLClassLoader$1.run(Unknown Source)
> at java.security.AccessController.doPrivileged(Native Method)
> ...



Ich tappe echt im Dunkeln und weiß nicht wie das obige Problem entsteht!
Für die JDK genügt ein Eintrag in PATH, für log4j muss ein CLASSPATH her. Für eine Erklärung in einfachen Worten wäre ich sehr dankbar.


----------



## XHelp (19. Feb 2011)

Sag was du alles machst mit *genauen* Angaben.


----------



## Wang (19. Feb 2011)

XHelp hat gesagt.:


> Sag was du alles machst mit *genauen* Angaben.



Im Ordner von log4j ist ein Datei namens "INSTALL", welche ein kleines Beispielprogramm enthält, um zu testen, ob die Installation geklappt hat:


```
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
 
public class Hello
{
    private static final Logger logger = Logger.getLogger(Hello.class);
    
    public static void main(String argv[])
    {
        BasicConfigurator.configure();
        logger.debug("Hello world.");
        logger.info("What a beatiful day.");
    }
}
```

Momentaner Stand:
Ich habe in Windows 7 unter Umgebungsvariablen -> Systemvariablen eine Variable CLASSPATH erstellt und sie mit dem Wert "C:\Users\Mustermann\Desktop\apache-log4j-1.2.16\log4j-1.2.16.jar" (ohne "") versehen, also nur unter CLASSPATH und nicht unter PATH.
Immerhin klappt jetzt das Kompilieren (vorher, als ich unter PATH "C:\Users\Mustermann\Desktop\apache-log4j-1.2.16\" stehen hatte, ging selbst das nicht), aber die .class-Datei lässt sich mit 
	
	
	
	





```
java Hello
```
 eben nicht starten.

Ich durchschaue leider nicht, woran das liegt und überhaupt, warum der Eintrag in CLASSPATH im Gegensatz zum gleichen Eintrag in PATH dazu führt, dass der Code kompiliert. ???:L


----------



## XHelp (19. Feb 2011)

Von wo aus startest du denn? Wo liegt die class? Warum benutzt du eigentlich keine IDE?


----------



## Wang (19. Feb 2011)

XHelp hat gesagt.:


> Von wo aus startest du denn? Wo liegt die class? Warum benutzt du eigentlich keine IDE?



Von der Konsole aus und die Hello.class befindet sich frei auf dem Desktop. Ich weiß, in Eclipse wäre das mit 1-2 Klicks erledigt, aber es wurmt mich, dass ich das mit der Konsole nicht hinbekomme.


----------



## Wang (19. Feb 2011)

Ich habe jetzt endlich die Ursache dafür gefunden (und verschweige besser, wie lange ich hier davor saß  ). CLASSPATH als Systemvariable war richtig, allerdings muss der Wert 
	
	
	
	





```
.;C:\Users\Mustermann\Desktop\apache-log4j-1.2.16\log4j-1.2.16.jar
```
 und NICHT 
	
	
	
	





```
C:\Users\Mustermann\Desktop\apache-log4j-1.2.16\log4j-1.2.16.jar
```
 heißen. Mit anderen Worten: dadurch, dass 
	
	
	
	





```
.;
```
 gefehlt hat, wurde das aktuelle Verzeichnis außer Acht gelassen...
Das war auf jeden Fall mal eine ordentliche Lektion für mich.

Frage an die Profis:
Warum hat es nicht geklappt (ohne irgendwelche Umgebungsvariablen gesetzt zu haben), als ich die .jar-Datei von log4j in das Verzeichnis 
	
	
	
	





```
C:\Program Files\Java\jdk1.6.0_18\lib\
```
 und auch in das Verzeichnis 
	
	
	
	





```
C:\Program Files\Java\jdk1.6.0_18\jre\lib
```
 kopiert hatte, denn schließlich sollte doch der Compiler/Interpreter darauf immer automatisch zugreifen ???:L


----------

