Erstellen vs. Kompilieren (Java)


138

Ich denke, dass die Antwort darauf ziemlich offensichtlich ist, aber hier ist es:

Wenn ich an einem kleinen Projekt für die Schule (in Java) arbeite, kompiliere ich es.

In meinem Stall benutzen wir Ameisen, um zu bauen unser Projekt .

Ich denke, dass das Kompilieren eine Teilmenge des Bauens ist. Ist das richtig? Was ist der Unterschied zwischen Erstellen und Kompilieren?

Verwandte:
Was ist der Unterschied zwischen Kompilieren und Erstellen?

Antworten:


229

Der "Build" ist ein Prozess, der alle Schritte abdeckt, die erforderlich sind, um ein "Ergebnis" Ihrer Software zu erstellen. In der Java-Welt umfasst dies normalerweise:

  1. Quellen generieren (manchmal).
  2. Quellen kompilieren.
  3. Testquellen kompilieren.
  4. Ausführen von Tests (Komponententests, Integrationstests usw.).
  5. Verpackung (in Glas, Krieg, Ejb-Glas, Ohr).
  6. Ausführen von Integritätsprüfungen (statische Analysegeräte wie Checkstyle, Findbugs, PMD, Testabdeckung usw.).
  7. Berichte erstellen.

Wie Sie sehen, ist das Kompilieren nur ein (kleiner) Teil des Builds (und die beste Vorgehensweise besteht darin, alle Schritte mit Tools wie Maven oder Ant vollständig zu automatisieren und den Build kontinuierlich auszuführen, was als kontinuierliche Integration bezeichnet wird ).


2
Warum sollte man es "Continuous Integration" anstelle von "Continuous Building" nennen?
Quazi Irfan

@Pascal, Re "Build kontinuierlich ausführen" .. "Der Build " bezieht sich auf?
Pacerier

4
@Pacerier "the build" bezieht sich auf alle Schritte 1.-7.; "kontinuierlich" bedeutet nicht, dass Sie den nächsten Build sofort nach Abschluss des ersten Builds starten, sondern nur bei Änderungen im Projekt.
Michelek

und wenn es Quellen erzeugt, wie Sie im 1. Punkt erwähnen (Quellen erzeugen (manchmal).)
Deepak Gupta

42

Einige der Antworten, die ich hier sehe, sind nicht kontextbezogen und sinnvoller, wenn dies eine C / C ++ - Frage wäre.

Kurzfassung:

  • "Kompilieren" verwandelt Java-Dateien in Klassendateien
  • "Erstellen" ist ein Oberbegriff, der das Kompilieren und andere Aufgaben umfasst.

"Bauen" ist ein Oberbegriff , der die Gesamtheit beschreibt das Kompilieren umfasst. Der Erstellungsprozess kann beispielsweise Tools enthalten, die Java-Code oder Dokumentationsdateien generieren.

Oft gibt es zusätzliche Phasen, wie "Paket", das alle Ihre .class-Dateien in eine .jar-Datei legt, oder "clean", das .class-Dateien und temporäre Verzeichnisse bereinigt.


32

Beim Kompilieren wird Quellcode in Objektcode umgewandelt.

Beim Verknüpfen werden Objektcode mit Bibliotheken zu einer ausführbaren Rohdatei kombiniert.

Bauen ist die Sequenz aus Kompilieren und Verknüpfen mit möglicherweise anderen Aufgaben wie die Konstruktion von Setups.

Viele Compiler erledigen den Verknüpfungsschritt nach dem Kompilieren des Quellcodes automatisch.

Was ist der Unterschied zwischen Kompilierungscode und ausführbarem Code?


Einige andere mögliche Aufgaben: Verbessern (JDO), Javadocing, Verpacken und Signieren. Darüber hinaus können einige Umgebungen automatisierte Einheiten- / Regressionstests als Teil eines "Builds" ausführen.
Bert F

Normalerweise gibt es beim Erstellen von Java-Projekten keinen Verknüpfungsschritt und es wird keine ausführbare Rohdatei erstellt. Vielmehr werden die kompilierten Klassen als Teil des Builds zusammen in eine JAR-Datei gepackt. (Oder .war oder .ear, abhängig von Ihrer Zielumgebung.)
Markusk

1
Was sind "rohe ausführbare Dateien"?
ealeon

Die Tüte mit Bits, die für sich genommen im Grunde genommen nutzlos ist, ohne mit den anderen benötigten Bibliotheken gemischt zu werden. Es ist wie ein Schokoladenkuchen. Ohne Mehl, Eier usw. ist der Kakao nur roher Kakao.
Kaili

9

In einfachen Worten

Die Kompilierung übersetzt Java-Code (lesbar) in Bytecode, sodass die virtuelle Maschine ihn versteht.

Beim Erstellen werden alle kompilierten Teile zusammengefügt und eine ausführbare Datei erstellt (erstellt).


Sie sprechen von "Interpretation" ... beim Kompilieren wird der von Menschen lesbare Code in Maschinencode umgewandelt
mortsahl

@ Tom, du meinst eine "ausführbare Datei" oder " ausführbare JAR- Datei"?
Schrittmacher

4

Eigentlich machst du das Gleiche. Ant ist ein Build-System, das auf XML-Konfigurationsdateien basiert und eine Vielzahl von Aufgaben im Zusammenhang mit dem Kompilieren von Software ausführen kann. Das Kompilieren Ihres Java-Codes ist nur eine dieser Aufgaben. Es gibt viele andere, wie das Kopieren von Dateien, das Konfigurieren von Servern, das Zusammenstellen von Zips und Jars und das Kompilieren anderer Sprachen wie C.

Sie benötigen Ant nicht, um Ihre Software zu kompilieren. Sie können es manuell tun, wie Sie es in der Schule tun. Eine andere Alternative zu Ant ist ein Produkt namens Maven. Sowohl Ant als auch Maven machen dasselbe, aber auf ganz unterschiedliche Weise.

Lookup Ant und Maven für weitere Details.


Sie können auch sehen, was ant tatsächlich tut, indem Sie sich die Build-Datei ansehen (höchstwahrscheinlich build.xml genannt). Auch wenn Sie mit der Syntax nicht vertraut sind, können Sie sehen, was los ist. <javac> bedeutet, dass Java-Code kompiliert wird. <java> bedeutet, dass der kompilierte Code tatsächlich ausgeführt wird. Wahrscheinlich wird ein Verzeichnis erstellt, in das die .class-Dateien
eingefügt

4
  • Bauen ist eine kompilierte Version eines Programms.
  • Kompilieren bedeutet, ein Programm in einen Maschinencode oder eine untergeordnete Form umzuwandeln, in der das Programm ausgeführt werden kann.

In Java : Build ist ein Lebenszyklus, der eine Folge benannter Phasen enthält.

Beispiel: Maven hat drei Build-Lebenszyklen, der folgende ist der defaultBuild-Lebenszyklus.

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

In Eclipse und IntelliJ besteht der Erstellungsprozess aus den folgenden Schritten: Bereinigen der vorherigen Pakete, Validieren, Kompilieren, Testen, Paketieren,
Integrieren, Überprüfen, Installieren, Bereitstellen.


0

Beim Kompilieren wird lediglich der Quellcode in Binärcode konvertiert. Beim Erstellen werden alle anderen benötigten Dateien kompiliert und in das Erstellungsverzeichnis verknüpft

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.