Building vs. Compiling (Java)


138

Pensando che la risposta a questa domanda sia abbastanza ovvia, ma qui va:

Quando sto lavorando a un piccolo progetto per la scuola (a Java) lo compilo .

Sulla mia gabbia stiamo usando la formica per costruire il nostro progetto.

Penso che la compilazione sia un sottoinsieme di edifici. È corretto? Qual è la differenza tra costruzione e compilazione?

Correlati:
Qual è la differenza tra compilazione e costruzione?

Risposte:


229

Il "Build" è un processo che copre tutti i passaggi necessari per creare un "deliverable" del tuo software. Nel mondo Java, questo include in genere:

  1. Generare fonti (a volte).
  2. Fonti di compilazione.
  3. Compilazione di fonti di test.
  4. Esecuzione di test (unit test, test di integrazione, ecc.).
  5. Imballaggio (in barattolo, guerra, ejb-jar, orecchio).
  6. Esecuzione di controlli di integrità (analizzatori statici come Checkstyle, Findbugs, PMD, copertura dei test, ecc.).
  7. Generazione di rapporti.

Come puoi vedere, la compilazione è solo una (piccola) parte della build (e la migliore pratica è quella di automatizzare completamente tutti i passaggi con strumenti come Maven o Ant e di eseguire la build in modo continuo noto come integrazione continua ).


2
Perché chiamarlo "Integrazione continua" anziché "Costruzione continua"?
Quazi Irfan,

@Pascal, Re "esegui la build continuamente" .. "si riferisce alla build "?
Pacerier,

4
@Pacerier "la build" si riferisce a tutti i passaggi 1.-7 .; "continuamente" non significa che inizi la prossima build immediatamente dopo la prima, ma solo sulle modifiche al progetto.
michelek,

e quando genera fonti come menzionato nel primo punto (Generazione di fonti (a volte).)
Deepak Gupta,

42

Alcune delle risposte che vedo qui sono fuori contesto e hanno più senso se questa fosse una domanda C / C ++.

Versione breve:

  • La "compilazione" sta trasformando i file .java in file .class
  • "Edificio" è un termine generico che include la compilazione e altre attività.

"Edificio" è un termine generico che descrive il generale processo che include la compilazione. Ad esempio, il processo di compilazione potrebbe includere strumenti che generano codice Java o file di documentazione.

Spesso ci saranno fasi aggiuntive, come "pacchetto" che prende tutti i tuoi file .class e li mette in un .jar, o "clean" che pulisce i file .class e le directory temporanee.


32

compilazione è l'atto di trasformare il codice sorgente in codice oggetto.

Collegamento è l'atto di combinare il codice oggetto con le librerie in un eseguibile non elaborato.

La costruzione è la sequenza composta da compilazione e collegamento , con possibilmente altre attività come la creazione dell'installer.

Molti compilatori gestiscono automaticamente la fase di collegamento dopo aver compilato il codice sorgente.

Qual è la differenza tra il codice di compilazione e il codice eseguibile?


Alcune altre attività possibili: valorizzazione (JDO), Javadoc-ing, packaging e firma. Inoltre, alcuni ambienti, incluso l'esecuzione di test di regressione / unità automatizzati come parte di una "build".
Bert F

Normalmente, non esiste alcun passaggio di collegamento durante la creazione di progetti Java e non viene prodotto alcun eseguibile non elaborato. Piuttosto, le classi compilate sono impacchettate insieme in un file .jar come parte della build. (O .war, o .ear, a seconda dell'ambiente di destinazione.)
markusk

1
che cosa sono "eseguibili non elaborati"?
ealeon,

La borsa di bit che è praticamente inutile da sola senza essere mescolata con le altre librerie di cui ha bisogno. È molto simile a una torta al cioccolato. Senza farina e uova, ecc., Il cacao è solo cacao crudo.
Kaili,

9

In parole semplici

La compilazione traduce il codice java (leggibile dall'uomo) in bytecode, quindi la macchina virtuale lo capisce.

Building mette insieme tutte le parti compilate e crea (costruisce) un eseguibile.


Quello di cui stai parlando è "Interpretazione" ... la compilazione sta trasformando il codice leggibile dall'uomo in codice macchina
mortsahl,

@ Tom, vuoi dire un "eseguibile" o " eseguibile jar "?
Pacerier,

4

In realtà stai facendo la stessa cosa. Ant è un sistema di compilazione basato su file di configurazione XML in grado di eseguire una vasta gamma di attività correlate al software di compilazione. Compilare il tuo codice java è solo una di quelle attività. Ce ne sono molti altri come copiare file, configurare server, assemblare zip e vasetti e compilare altre lingue come C.

Non hai bisogno di Ant per compilare il tuo software. Puoi farlo manualmente come stai facendo a scuola. Un'altra alternativa a Ant è un prodotto chiamato Maven. Sia Ant che Maven fanno la stessa cosa, ma in modi abbastanza diversi.

Cerca Ant e Maven per maggiori dettagli.


Puoi anche vedere cosa sta realmente facendo la formica guardando il file build (molto probabilmente chiamato build.xml). Anche se non hai familiarità con la sintassi, puoi in qualche modo vedere cosa sta succedendo. <javac> significa che sta compilando del codice Java. <java> significa che sta effettivamente eseguendo il codice compilato. Probabilmente sta creando una directory in cui inserire i file .class, compilando il codice, magari creando un po 'di Javadoc, ecc.
MatrixFrog

4
  • Build è una versione compilata di un programma.
  • Compilare significa convertire (un programma) in un codice macchina o in un livello di livello inferiore in cui il programma può essere eseguito.

In Java : Build is a Life include un ciclo di fasi denominate.

per esempio: maven ha tre cicli di vita build, il seguente è il defaultciclo di vita build.

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 e IntelliJ, il processo di compilazione prevede i seguenti passaggi: pulizia dei pacchetti precedenti, convalida, compilazione, test, pacchetto,
integrazione, verifica, installazione, distribuzione.


0

La compilazione sta semplicemente convertendo il codice sorgente in binario, costruendo sta compilando e collegando tutti gli altri file necessari nella directory di compilazione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.