2010-03-14 10 views
31

Przeczytałem dokumentację dotyczącą słońca i wiele postów w Stack Overflow, ale nadal jestem zdezorientowany różnicami między opcjami kompilatora Java -cp i -sourcepath.Różnice między ścieżkami klas i ścieżkami źródłowymi javac

powiedzmy mam struktury katalogów:

c:\Java\project1\src (where the Java source files are) 
c:\Java\project1\bin (where the Java class files will be or already are) 

Powiedzmy też, że mam plik źródłowy MainClass.java w pakiecie com.mypackage, a struktura katalogów jest ok w folderze źródłowym.

jestem w project1 katalogu i uruchomić:

javac -d bin -sourcepath src src/com/mypackage/MainClass.java 

lub

javac -d bin -classpath src src/com/mypackage/MainClass.java 

i uzyskać ten sam rezultat. W trybie szczegółowym ścieżka wyszukiwania dla plików źródłowych to src w obu przypadkach.

Byłoby świetnie, gdyby ktokolwiek mógł mi pomóc w określeniu szczegółów tych opcji.

Odpowiedz

21
-classpath classpath 

Ustawia ścieżkę klasy użytkownika, przesłaniając ścieżkę klasy użytkownika w zmiennej środowiskowej CLASSPATH. Jeśli nie podano opcji CLASSPATH lub -classpath, ścieżka klasy użytkownika składa się z bieżącego katalogu.

Jeśli opcja -sourcepath nie jest określona, ​​przeszukiwana jest ścieżka klasy użytkownika zarówno dla plików źródłowych, jak i klas.

-sourcepath sourcepath 

Określ ścieżkę kodu źródłowego, aby szukać definicji klasy lub interfejsu. Podobnie jak w przypadku ścieżki klasy użytkownika, wpisy ścieżki źródłowej są oddzielone średnikami (;) i mogą to być katalogi, archiwa JAR lub archiwa ZIP. Jeśli używane są pakiety, nazwa lokalnej ścieżki w katalogu lub archiwum musi odzwierciedlać nazwę pakietu.

Należy pamiętać, że klasy znalezione za pośrednictwem ścieżki klas podlegają automatycznej rekompilacji, jeśli zostaną znalezione ich źródła.

+2

Dziękuję za odpowiedź. Ostatnie zdanie jest tym, czego szukałem: automatyczna rekompilacja plików źródłowych znajdujących się w cp. Zweryfikowałem datę modyfikacji plików .class w katalogu bin i postępuję zgodnie z tą zasadą! Oto duża różnica między 2 opcjami. Czas kompilacji również daje tę wskazówkę. Dziękuję Ci! – Alex

7
  • SourcePath gdzie jest korzeniem kodu skompilować
  • ścieżki klasy mogą zawiera kod, ale także biblioteki trzeba
+0

Dziękuję za odpowiedź. – Alex

4

CLASSPATH informuje kompilator i program ładujący klasy gdzie szukać Pliki .class, których potrzebuje.

Ścieżka źródłowa to coś, z czego nie korzystam zbyt wiele. Uważam, że jest to opcjonalne, ponieważ zazwyczaj bieżącym katalogiem jest ścieżka źródłowa. CLASSPATH nie jest.

1
  • ścieżka klasy jest poszukiwany klasy (.class) pliki
  • SourcePath jest poszukiwany źródłowych (.java) plików (.a.k.klasa lub interfejs definicje)

Jednak jeśli SourcePath nie jest określony, ścieżka klasy jest poszukiwany zarówno dla plików klas i plików źródłowych.

To prowadzi mnie do przekonania, że ​​prawie zawsze możemy zachować prostotę, używając tylko ścieżki klasowej i unikając całkowicie ścieżki źródłowej.

Osoby, które muszą używać zarówno ścieżki klas, jak i ścieżki źródłowej, prawdopodobnie kierują uwagę na dziwną zawartość katalogu. Na przykład mogą mieć folder, który zawiera pliki źródłowe i pliki klas, ale chcą tylko wyszukiwać pliki źródłowe.

Powiązane problemy