Tworzenie a kompilowanie (Java)


138

Myślę, że odpowiedź na to pytanie jest dość oczywista, ale oto ona:

Kiedy pracuję nad małym projektem dla szkoły (w języku Java), kompiluję go.

W moim kurniku używamy mrówek do budowy naszego projektu.

Myślę, że kompilowanie to podzbiór budowania. Czy to jest poprawne? Jaka jest różnica między budowaniem a kompilacją?

Powiązane:
Jaka jest różnica między kompilowaniem a budowaniem?

Odpowiedzi:


229

„Kompilacja” to proces obejmujący wszystkie kroki wymagane do utworzenia „produktu dostarczanego” oprogramowania. W świecie Java zazwyczaj obejmuje to:

  1. Generowanie źródeł (czasami).
  2. Kompilowanie źródeł.
  3. Kompilowanie źródeł testowych.
  4. Wykonywanie testów (testy jednostkowe, testy integracyjne itp.).
  5. Opakowanie (do słoika, wojny, ejb-słoika, ucha).
  6. Przeprowadzanie kontroli stanu (analizatory statyczne, takie jak Checkstyle, Findbugs, PMD, pokrycie testów itp.).
  7. Generowanie raportów.

Jak widać, kompilacja to tylko (mała) część kompilacji (a najlepszą praktyką jest pełna automatyzacja wszystkich kroków za pomocą narzędzi takich jak Maven lub Ant i ciągłe uruchamianie kompilacji, co jest znane jako ciągła integracja ).


2
Po co nazywać to „ciągłą integracją” zamiast „ciągłym budowaniem”?
Quazi Irfan

@Pascal, Re "uruchamiaj kompilację w sposób ciągły" .. odnosi się do " kompilacji "?
Pacerier

4
@Pacerier „kompilacja” odnosi się do wszystkich kroków 1.-7 .; „W sposób ciągły” nie oznacza, że ​​rozpoczynasz następną kompilację natychmiast po zakończeniu pierwszego, ale tylko po zmianach w projekcie.
michelek

i kiedy generuje źródła, jak wspomniałeś w punkcie 1 (Generowanie źródeł (czasami).)
Deepak Gupta.

42

Niektóre odpowiedzi, które tu widzę, są wyrwane z kontekstu i mają więcej sensu, gdyby było to pytanie C / C ++.

Krótka wersja:

  • „Kompilowanie” zamienia pliki .java na pliki .class
  • „Budowanie” to termin ogólny obejmujący kompilację i inne zadania.

„Budowanie” to ogólny termin opisujący cały proces, który obejmuje kompilację. Na przykład proces budowania może obejmować narzędzia generujące kod Java lub pliki dokumentacji.

Często pojawią się dodatkowe fazy, takie jak „pakiet”, który pobiera wszystkie pliki .class i umieszcza je w .jar lub „czyszczenie”, które czyści pliki .class i katalogi tymczasowe.


32

Kompilacja to czynność polegająca na przekształceniu kodu źródłowego w kod wynikowy.

Łączenie jest czynnością polegającą na łączeniu kodu obiektowego z bibliotekami w surowy plik wykonywalny.

Budowanie to sekwencja składająca się z kompilacji i linkowania , z możliwymi innymi zadaniami, takimi jak tworzenie instalatora.

Wiele kompilatorów obsługuje krok łączenia automatycznie po skompilowaniu kodu źródłowego.

Jaka jest różnica między kodem kompilowanym a kodem wykonywalnym?


Inne możliwe zadania: ulepszanie (JDO), Javadocing, pakowanie i podpisywanie. Ponadto niektóre środowiska obejmują uruchamianie automatycznych testów jednostkowych / testów regresyjnych w ramach „kompilacji”.
Bert F

Zwykle nie ma etapu łączenia podczas budowania projektów Java i nie jest tworzony żaden plik wykonywalny. Zamiast tego skompilowane klasy są pakowane razem do pliku .jar jako część kompilacji. (Lub .war lub .ear, w zależności od środowiska docelowego.)
markusk

1
czym są „surowe pliki wykonywalne”?
ealeon

Worek bitów, który sam w sobie jest bezużyteczny, bez mieszania się z innymi potrzebnymi bibliotekami. Przypomina ciasto czekoladowe. Bez mąki i jajek itp. Kakao jest po prostu surowym kakao.
Kaili

9

W prostych słowach

Kompilacja tłumaczy kod Java (czytelny dla człowieka) na kod bajtowy, dzięki czemu maszyna wirtualna go rozumie.

Building łączy wszystkie skompilowane części razem i tworzy (buduje) plik wykonywalny.


To, o czym mówisz, to „Interpretacja”… kompilacja zmienia kod czytelny dla człowieka w kod maszynowy
mortsahl

@Tom, masz na myśli „plik wykonywalny” lub „ plik wykonywalny jar ”?
Pacerier,

4

Właściwie robisz to samo. Ant to system budowania oparty na plikach konfiguracyjnych XML, który może wykonywać szeroki zakres zadań związanych z kompilacją oprogramowania. Kompilowanie kodu Java to tylko jedno z tych zadań. Istnieje wiele innych, takich jak kopiowanie plików, konfigurowanie serwerów, tworzenie plików ZIP i JAR oraz kompilowanie innych języków, takich jak C.

Nie potrzebujesz Anta do kompilacji oprogramowania. Możesz to zrobić ręcznie, tak jak w szkole. Inną alternatywą dla Ant jest produkt o nazwie Maven. Zarówno Ant, jak i Maven robią to samo, ale na różne sposoby.

Wyszukaj Ant i Maven, aby uzyskać więcej informacji.


Możesz także zobaczyć, co faktycznie robi mrówka, przeglądając plik kompilacji (najprawdopodobniej nazywany build.xml). Nawet jeśli nie znasz składni, możesz zobaczyć, co się dzieje. <javac> oznacza, że ​​kompiluje jakiś kod Java. <java> oznacza, że ​​faktycznie uruchamia skompilowany kod. Prawdopodobnie chodzi o utworzenie katalogu, w którym można umieścić pliki .class, kompilację kodu, może utworzenie jakiegoś Javadoc itp.
MatrixFrog

4
  • Build to skompilowana wersja programu.
  • Kompilacja oznacza konwersję (programu) na kod maszynowy lub formę niższego poziomu, w której program może zostać wykonany.

W Javie : Build to cykl życia zawiera sekwencję nazwanych faz.

na przykład: maven ma trzy cykle życia kompilacji, następny to defaultcykl życia kompilacji.

validate - validate the project is correct and all necessary information is available
compile - compile the source code of the project
test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
package - take the compiled code and package it in its distributable format, such as a JAR.
integration-test - process and deploy the package if necessary into an environment where integration tests can be run
verify - run any checks to verify the package is valid and meets quality criteria
install - install the package into the local repository, for use as a dependency in other projects locally
deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

1

W Eclipse i IntelliJ proces budowania składa się z następujących kroków: czyszczenie poprzednich pakietów, walidacja, kompilacja, testowanie, pakowanie,
integracja, weryfikacja, instalacja, wdrażanie.


0

Kompilowanie to po prostu konwersja kodu źródłowego do pliku binarnego, budowanie to kompilowanie i łączenie innych potrzebnych plików w katalogu kompilacji

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.