Ich bin relativ neu in Java. Ich habe mit Eclipse gearbeitet, aber ich möchte zu den Grundlagen zurückkehren und einfach einen Texteditor in Verbindung mit dem JDK verwenden. Das Problem, das ich jetzt habe, ist, dass Eclipse und andere IDEs eine Menge fundamentaler Dinge verstecken, was sehr wichtig ist, um es zu verstehen und zu verstehen. Das ist, was ich versuche zu tun:
Ich habe ein Verzeichnis namens "C: \ Java Projects" erstellt, unter dem ich 3 Unterordner, Project1, Project2 und SharedJars, erstellt habe. Project1 und Project2 haben beide SubDirs wie Klassen und Quellen. Die Source-Dateien .java von Poject1 befinden sich in "c: \ Java Projects \ Project1 \ source \ com \ myApp"
Sowohl Project1 als auch Project2 sind Pakete, die das Log4J-JAR verwenden, das sich im SharedJars-Ordner befindet. In der Eclipse-Welt könnte ich etwas festlegen, das Eclipse mitteilt, welche JARs mein Projekt verwenden wird, und dann etwas wie org.apache.log4j.Logger importieren, was gut funktioniert hat. Aber ich kämpfe darum, dass das funktioniert.
Ich habe die CLASSPATH-Umgebungsvariable wie "C: \ Java Projects \ SharedJars \ log4j-1.2.15.jar"
Ich mache dann folgendes:
cd Project1 \ source
javac -d .. \ classes com \ myApp \ *
Dies erzeugt eine ganze Reihe zusammenhängender Fehler wie
Abgerufen _JAVA_OPTIONS: -Duser.home="C: \ Java Projects"
com \ myApp \ Monitor.java: 11: kann das Symbol
nicht finden
Symbol: Klasse Logger
location: Klasse com.myApp.Monitor
private statische Logger LOG;
Einige Fragen: 1) Muss ich org.apache.log4j.Logger noch importieren? 2) Wenn ja, was bestimmt den FQDN des Pakets? 3) Muss ich in einem bestimmten Verzeichnis sein, um javac ausführen zu können? Zur Zeit gehe ich in das Quellverzeichnis von Project1 (das Java / Bin ist bereits in meinem PATH)
Entschuldige diese dummen Fragen. Ich habe so viele Websites durchforstet, aber viele decken nicht die Grundlagen ab. Ich hoffe, das macht Sinn.
Rgds John
Willkommen bei SO.
Als Antwort darauf:
Muss ich noch org.apache.log4j.Logger importieren?
Ja, Sie müssen immer Import-Direktiven für jede Klasse verwenden, die Sie verwenden möchten. Java lädt nichts, selbst wenn es auf dem Klassenpfad steht, es sei denn, Sie sagen es ihm.
Wenn ja, was bestimmt den FQDN des Pakets?
Innerhalb des Jar befinden sich die .class-Dateien in Unterverzeichnissen wie diesem: org/apache/log4j ...
usw. So wird der FQDN bestimmt und er wird grundsätzlich als Namespace-Konstrukt verwendet, so dass Sie zwei oder mehr Klassen davon haben können Name - deshalb kann Java auch nicht alles auf dem Klassenpfad laden. Wenn es so wäre, hätte es keine Möglichkeit, zu disambiguieren und herauszufinden, welche Klasse Sie wollten.
Muss ich in einem bestimmten Verzeichnis sein, um
javac
ausführen zu können?
Nein. Sie können dies von überall ausführen, vorausgesetzt, der Klassenpfad kann von wo auch immer Sie kommen, zu Ihren Abhängigkeiten gelangen. Es könnte ein relativer Klassenpfad sein, wenn er in der Befehlszeile oder absolut in einer Umgebungsvariablen angegeben wird. Ebenso müssen Sie sich nicht in einem bestimmten Verzeichnis befinden, um java
zu verwenden, aber Sie benötigen es, um an den richtigen Ort zu gelangen.
1) Muss ich noch org.apache.log4j.Logger importieren?
Ja, und das sollte den Fehler in Ihrer Frage beheben, weil Ihre CLASSPATH
korrekt ist.
2) Wenn ja, was bestimmt den FQDN des Pakets?
Der import
ändert den FQDN des Pakets nicht. Es erlaubt Ihnen nur, auf org.apache.log4j.Logger
einfach als Logger
innerhalb dieser Datei zu verweisen.
3) Muss ich in einem bestimmten Verzeichnis sein, um javac auszuführen?
Nein, aber es ist am einfachsten, wenn das aktuelle Verzeichnis das Verzeichnis source
des Projekts ist, das Sie kompilieren (wenn dies nicht der Fall wäre, könnten Sie es mit der Option -sourcepath
auf javac
umgehen.)
Wie für das Ausführen des Programms möchten Sie möglicherweise ein Project1.jar
erstellen und das Manifest verwenden, um es zu sagen, wo log4j.jar
zu finden ist, aber das ist
finnw
08.09.2010 12:11
Ich poste meine Lösung, weil keine der obigen Lösungen für mich geeignet war. Es funktioniert für mich unter Windows XP / 7.
Gehen Sie zur Befehlszeile und überprüfen Sie, ob alles funktioniert, indem Sie ein Beispiel aus dem log4j-Kurzanleitung (attachede unten) ausprobieren:
cd c: \ Benutzer \ Benutzer \ log4j
javac MyApp2.java
2012-03-30 21:32 510 Bar.class
2012-03-30 21:24 177 Bar.java
2012-03-30 21:26 334 MyApp2-log4j.properties
2012-03-30 21:32 916 MyApp2.class
2012-03-30 21:25 775 MyApp2.java
Java MyApp2 MyApp2-log4j.properties
0 [main] INFO MyApp2 - Eingabe der Anwendung
2 [main] DEBUG Bar - Hat es wieder getan 3 [main] INFO MyApp2 - Beenden der Anwendung
// 1. Gehen Sie zu Ihrem Quellverzeichnis (z. B. c: \ Benutzer \ Hopbit \ log4j)
// 2. Erstellen Sie unter Bar-Klasse und speichern Sie als Bar.java
%Vor%// 3. Erstellen Sie unter MyApp2 Klasse und speichern Sie als MyApp2.java
%Vor%// 4. Erstellen & amp; Speichern Sie die Datei MyApp2-log4j.properties, die den folgenden Code enthält:
%Vor%// 5. Versuchen Sie, oben Beispiel zu kompilieren, sollte es etwas wie folgt zurückgeben:
%Vor%[1] Ссылка ("Kurze Einführung in log4j: Ceki GŁlcŁ, März 2002") < br> [2] Ссылка [3] Die obige Lösung wurde in der Datei INSTALL erstellt, die im Paket log4j abgelegt ist.