Warum funktioniert der Befehl javac -cp? pkg/A.java Arbeit erfolgreich, obwohl haben wir noch nicht B.java zusammengestellt
Wenn Sie A.java
kompilieren, wird der Compiler B.java
auch kompilieren, da beide A.java
und B.java
im selben Paket sind. Dies funktioniert auch wenn B.java
war in einem anderen Paket von A.java
(sofern B
ist öffentlich), solange beide Pakete in der wrk
Verzeichnis vorhanden sind und Sie kompilieren A.java
von wrk
Verzeichnis.
Vom Oracle documentation für javac
:
Wenn die -sourcepath Option nicht angegeben ist, wird der Benutzer Klassenpfad auch für Quelldateien gesucht.
Vom Oracle document für CLASSPATH
Der Standardwert für den Klassenpfad ist ""
Wenn Sie kein CLASSPATH
eingestellt haben, wird es zu .
vorbelegt werden. Anschließend wird sourcepath
auch .
sein, da der Standard sourcepath
derselbe wie der CLASSPATH
ist. Sie können bestätigen, dass der Standard-Quellpfad auf .
festgelegt ist, indem Sie A.java
mit javac -verbose -g pkg\A.java
kompilieren.Beachten Sie, dass der Compiler im aktuellen Verzeichnis für .java
Dateien suchen:
[parsing started pkg\A.java] [parsing completed 29ms] [search path for source files: [.]]
Um zu bestätigen, dass die sourcepath
-CLASSPATH
eingestellt ist, können Sie versuchen, die CLASSPATH
Wechsel mit der -cp
Option durch A.java
Kompilieren javac -cp C:\ -verbose -g pkg\A.java
verwenden. A.java
kompiliert diese Zeit nicht, da Sie die CLASSPATH
zu C:\
überschrieben haben, und das ist, was sourcepath
standardmäßig auch wird. Dies ist die Ausgabe:
[parsing started pkg\A.java] [parsing completed 26ms] [search path for source files: [C:\]] pkg\A.java:3: cannot find symbol symbol : class B
Auch wenn das aktuelle Verzeichnis/top/WRK/Pkg dann der Befehl javac A.java arbeitet. Wie das?
Dies wird nicht unabhängig von Arbeit, ob B.class
in pkg
Haftungsausschluss vorhanden ist: Ich kann dieses Verhalten nur auf Windows bestätigen, aber ich bezweifle sehr, dass es auf anderen Betriebssystemen anders sein sollte.
Die Antwort liegt in http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html#BHCCHDGH. Keine Zeit, dies hier in Form einer Antwort kurz zu formulieren: Es sucht auch nach Quelldateien im Klassenpfad. – Marco13
Ich kann das nicht reproduzieren. Es kann nicht auf meinem Computer kompiliert werden. Bist du sicher, dass B noch nie kompiliert wurde? –
Es ist eine Mac/Windows-Sache. Sehen Sie meine bearbeitete und nun (hoffentlich) definitive Antwort für weitere Details. –