Jaka jest różnica między ścieżką klasy a ścieżką budowania

86

Jestem zdezorientowany z tymi dwoma terminami.

Co też powinienem zrobić, aby utworzyć plik w folderze src projektu Spring MVC? Kiedy tworzę za pomocą obiektu File, tworzy plik wewnątrz C: \ SpringSourceTool ... Myślę, że to jest ClassPath, prawda?

Jak mogę uzyskać applicationcontextfolder lub katalog główny aplikacji?

mehmet6parmak
źródło

Odpowiedzi:

100

Ścieżka kompilacji służy do budowania aplikacji. Zawiera wszystkie pliki źródłowe i wszystkie biblioteki Java, które są wymagane do skompilowania aplikacji.

Ścieżka klasy jest używana do wykonywania aplikacji. Obejmuje to wszystkie klasy i biblioteki Java, które są potrzebne do uruchomienia aplikacji Java. Ścieżka klasy jest obowiązkowa, a ścieżka domyślna .jest używana, jeśli maszyna wirtualna Java nie może znaleźć ścieżki zdefiniowanej przez użytkownika. ( CLASSPATHzmienna środowiskowa, -cpflaga lub Class-Path:atrybut w manifeście jar)

Andreas Dolk
źródło
Ale javac przyjmuje argument dotyczący ścieżki klas. Czy można powiedzieć, że ten parametr jest „przeciążony” przy określaniu ścieżki budowania?
aioobe
4
Nie. Argument classpath jest wskazówką dla kompilatora, czego powinien oczekiwać, że będzie dostępny / udostępniany w czasie wykonywania, ponieważ nie tworzysz wszystkich klas, których używasz samodzielnie (np. JFC, Libraries, ...). Ścieżka kompilacji zawiera zależności źródłowe i / lub źródłowe / skompilowane oraz miejsca ich wyszukiwania.
Johannes Wachter
Podczas tworzenia wtyczki dodałem wszystkie potrzebne biblioteki do ścieżki klas, ale nie mogłem nic zaimportować. Eclipse nie widział ich, dopóki nie dodałem ich do ścieżki budowania.
Bax,
51

Ścieżka klas to konwencjonalny sposób informowania (standardowego) kompilatora języka Java i środowiska wykonawczego Java, gdzie mają znaleźć skompilowane klasy. Zwykle jest to sekwencja nazw plików JAR i nazw katalogów. Ścieżka klas używana przez kompilator i system wykonawczy nie musi być taka sama, ale zazwyczaj powinna być , szczególnie w przypadku małego projektu.

Buildpath nie jest standardową terminologią języka Java. Jest to termin opisujący bogatszy sposób, w jaki typowe IDE określa relacje między „projektami”, które składają się na aplikację. IDE używa tego do ustalenia ścieżki klas i ścieżki źródłowej do kompilacji kodu Java oraz ścieżki klas do jej uruchomienia. Środowisko IDE używa również ścieżki kompilacji, aby dowiedzieć się, jak spakować kod i jego zależności (na przykład) jako plik WAR.

Na przykład ścieżka kompilacji Eclipse dla projektu zawiera inne projekty, od których zależy, i zawiera listę wszystkich dodatkowych plików JAR bibliotek, które zawiera projekt / na których opiera się. Zawiera również listę pakietów w bieżącym projekcie, od których mogą zależeć dalsze projekty.

(Jeśli używasz Maven w swoim projekcie, mechanizm IDE buildpath jest drugorzędny w stosunku do zależności zadeklarowanych w plikach POM. Na przykład, używając Eclipse z m2eclipse, ścieżka budowania jest syntetyzowana z plików POM).

Stephen C.
źródło
27

Ścieżka klasy jest używana w czasie wykonywania do ładowania skompilowanych klas i zasobów.

Ścieżka kompilacji jest używana w czasie kompilacji, aby znaleźć zależności potrzebne do skompilowania projektu.

KeatsPeeks
źródło
Czy możesz powiedzieć, że ścieżka klasy służy do lokalizowania .classplików (i innych skompilowanych zasobów), podczas gdy ścieżka budowania służy do lokalizowania plików źródłowych, które należy skompilować?
Adam
1
@Adam Nie sądzę, że to do końca prawda. Ścieżka kompilacji wymaga czasami plików .class do kompilowania plików źródłowych. Tak więc ścieżka budowania wykorzystuje również ścieżkę klasy za kulisami. Jeśli zajmiesz trochę czasu, aby skompilować i uruchomić projekt Java za pomocą Java CLI, możesz to zobaczyć. Polecenie javac i java mają opcję ścieżki klas, ponieważ obie mogą jej potrzebować.
intrepistar_88
4

Każdy projekt Java ma własną ścieżkę kompilacji, która określa wszystkie zależności wymagane do skompilowania projektu. Te zależności mogą pochodzić z innych projektów Java w obszarze roboczym, z plików .jar archiwum Java lub z folderów zawierających pliki .class.

W środowisku CLASSPATH musisz określić tylko pliki .class (tj. Jar, pliki zip - wewnątrz jar, pliki zip znajdziesz tylko klasy java) tj. Pomagasz wirtualnej maszynie Java (JVM) znaleźć pliki klas Java

Co powinienem zrobić, aby utworzyć plik w folderze src projektu Spring MVC? Kiedy tworzę za pomocą obiektu File, tworzy plik wewnątrz C: \ SpringSourceTool ...

To tutaj została uruchomiona maszyna JVM, jeśli chcesz utworzyć plik w innym miejscu, użyj ścieżki względnej z tego miejsca.

Zobacz to i to, aby uzyskać więcej informacji.

pavanlimo
źródło
W swojej odpowiedzi nawet nie wspomniałeś o ścieżce budowy.
aioobe
4

Chciałbym dodać do odpowiedzi Andreas_D, aby wyjaśnić, że ścieżka budowania jest wymagana przez IDE / kompilator do zlokalizowania zewnętrznych pakietów i klas używanych przez twój kod. Czasami nazywamy je „zależnościami” .

Uwaga: Te zewnętrzne pakiety mogą być spakowane w skompresowanym pliku .jar lub rzeczywiście, może być kilka plików jar spakowanych w „bibliotece” . Biblioteka lub grupa bibliotek często tworzy „ramy” .

Jeśli Twój kod wymaga kodu napisanego przez innych, możesz zaimportować je do swojej klasy za pomocą importpolecenia. Jednak to polecenie samo w sobie jest niewystarczające, ponieważ kompilator lub IDE muszą wiedzieć, gdzie znajdują się te klasy. Określasz to w ścieżce budowania .

Z classpathdrugiej strony informuje maszynę JVM obsługującą aplikację, gdzie znaleźć wszelkie zależności podczas rzeczywistego wykonywania kodu.

Uwaga: Classpath jest używany przez maszynę JVM.

Ścieżka kompilacji jest używana przez IDE / kompilator i jest środkiem do tworzenia ścieżki klas ze środowiska programistycznego. Konfigurując ścieżkę kompilacji za pośrednictwem środowiska IDE, konfigurujesz również w projekcie ukryty plik o nazwie .classpath. Służy do udostępniania ścieżki klas do maszyny JVM podczas wdrażania.

IqbalHamid
źródło
1

Classpath ( z Wikipedii ):

Podobnie jak w przypadku klasycznego dynamicznego ładowania, podczas wykonywania programów w języku Java, wirtualna maszyna języka Java znajduje i leniwie ładuje klasy (ładuje kod bajtowy klasy tylko wtedy, gdy klasa jest używana po raz pierwszy). Ścieżka klas mówi Javie, gdzie szukać w systemie plików plików definiujących te klasy.

Maszyna wirtualna wyszukuje i ładuje klasy w następującej kolejności:

klasy bootstrap: klasy, które są fundamentalne dla platformy Java (obejmujące publiczne klasy biblioteki klas języka Java oraz klasy prywatne, które są niezbędne, aby ta biblioteka działała).

klasy rozszerzeń: pakiety znajdujące się w katalogu rozszerzeń środowiska JRE lub JDK,

jre / lib / ext / pakiety i biblioteki zdefiniowane przez użytkownika

Domyślnie dostępne są tylko pakiety standardowego interfejsu API JDK i pakiety rozszerzeń bez konieczności określania, gdzie je znaleźć. Ścieżkę do wszystkich pakietów i bibliotek zdefiniowanych przez użytkownika należy ustawić w wierszu poleceń (lub w manifeście powiązanym z plikiem Jar zawierającym klasy).

Mówiąc najprościej - podczas działania programu JVM ładuje klasy tylko w razie potrzeby. Kiedy klasa jest potrzebna, JVM będzie zależało od ścieżki klas, aby wiedzieć, skąd załadować kod bajtowy (tj. .classPliki).

Z drugiej strony ścieżka kompilacji jest zwykle używana przez środowisko IDE, takie jak Eclipse, aby wiedzieć, gdzie szukać dodatkowych bibliotek, które są wymagane do skompilowania kodu źródłowego projektu. Ścieżka kompilacji nie jest używana w czasie wykonywania.

Tom O.
źródło