Compilación vs. compilación (Java)

138

Pensando que la respuesta a esto es bastante obvia, pero aquí va:

Cuando estoy trabajando en un pequeño proyecto para la escuela (en Java) lo compilo .

En mi cooperativa estamos usando hormiga para construir nuestro proyecto.

Creo que compilar es un subconjunto de construcción. ¿Es esto correcto? ¿Cuál es la diferencia entre construir y compilar?

Relacionado:
¿Cuál es la diferencia entre compilar y construir?

Sixtyfootersdude
fuente

Respuestas:

229

El "Build" es un proceso que cubre todos los pasos necesarios para crear un "entregable" de su software. En el mundo de Java, esto generalmente incluye:

  1. Generando fuentes (a veces).
  2. Recopilando fuentes.
  3. Compilación de fuentes de prueba.
  4. Ejecución de pruebas (pruebas unitarias, pruebas de integración, etc.).
  5. Embalaje (en jarra, guerra, ejb-jarra, oreja).
  6. Ejecución de comprobaciones de estado (analizadores estáticos como Checkstyle, Findbugs, PMD, cobertura de prueba, etc.).
  7. Generando informes.

Como puede ver, la compilación es solo una parte (pequeña) de la compilación (y la mejor práctica es automatizar completamente todos los pasos con herramientas como Maven o Ant y ejecutar la compilación de forma continua, lo que se conoce como integración continua ).

Pascal Thivent
fuente
2
¿Por qué llamarlo "integración continua" en lugar de "construcción continua"?
Quazi Irfan
@Pascal, Re "ejecutar la compilación de forma continua" .. "la compilación " se refiere?
Pacerier
44
@Pacerier "the build" se refiere a todos los pasos 1.-7 .; "continuamente" no significa que comience la próxima compilación inmediatamente después de que termine la primera, sino solo en los cambios en el proyecto.
michelek
y cuando genera fuentes como mencionas en el primer punto (Generando fuentes (a veces)).
Deepak Gupta
42

Algunas de las respuestas que veo aquí están fuera de contexto y tienen más sentido si se tratara de una pregunta C / C ++.

Version corta:

  • "Compilar" está convirtiendo archivos .java en archivos .class
  • 'Construir "es un término genérico que incluye la compilación y otras tareas.

"Construir" es un término genérico que describe el proceso general que incluye la compilación. Por ejemplo, el proceso de compilación puede incluir herramientas que generan código Java o archivos de documentación.

A menudo habrá fases adicionales, como "paquete" que toma todos sus archivos .class y los coloca en un archivo .jar, o "clean" que limpia los archivos .class y directorios temporales.

Darien
fuente
32

Compilar es el acto de convertir el código fuente en código objeto.

Vincular es el acto de combinar código objeto con bibliotecas en un ejecutable sin formato.

La construcción es la secuencia compuesta de compilación y vinculación , posiblemente con otras tareas, como la creación del instalador.

Muchos compiladores manejan el paso de vinculación automáticamente después de compilar el código fuente.

¿Cuál es la diferencia entre el código de compilación y el código ejecutable?

Kaili
fuente
Algunas otras tareas posibles: mejora (JDO), Javadoc-ing, empaquetado y firma. Además, algunos entornos incluyen la ejecución de pruebas de unidad / regresión automatizadas como parte de una "compilación".
Bert F
Normalmente, no hay un paso de vinculación al crear proyectos Java, y no se produce ningún ejecutable sin formato. Más bien, las clases compiladas se empaquetan juntas en un archivo .jar como parte de la compilación. (O .war, u .ear, dependiendo de su entorno objetivo.)
markusk
1
¿Qué son los "ejecutables sin procesar"?
ealeon
La bolsa de bits que es básicamente inútil por sí sola sin mezclarse con las otras bibliotecas que necesita. Es muy parecido a un pastel de chocolate. Sin la harina y los huevos, etc., el cacao es solo cacao crudo.
Kaili
9

En palabras simples

La compilación traduce el código Java (legible por humanos) en código de bytes, por lo que la máquina virtual lo comprende.

La construcción reúne todas las partes compiladas y crea (construye) un ejecutable.

Tom
fuente
Lo que estamos hablando es de "Interpretación" ... se está convirtiendo compilar el código legible por humanos en código máquina
mortsahl
@ Tom, ¿te refieres a un "ejecutable" o " ejecutable jar "?
Pacerier
4

En realidad estás haciendo lo mismo. Ant es un sistema de compilación basado en archivos de configuración XML que pueden realizar una amplia gama de tareas relacionadas con la compilación de software. Compilar su código Java es solo una de esas tareas. Hay muchos otros, como copiar archivos, configurar servidores, ensamblar zips y tarros, y compilar otros idiomas como C.

No necesita Ant para compilar su software. Puedes hacerlo manualmente como lo estás haciendo en la escuela. Otra alternativa a Ant es un producto llamado Maven. Tanto Ant como Maven hacen lo mismo, pero de maneras muy diferentes.

Busque Ant y Maven para más detalles.

drekka
fuente
También puede ver qué está haciendo realmente la hormiga mirando el archivo de compilación (muy probablemente llamado build.xml). Incluso si no está familiarizado con la sintaxis, puede ver lo que está sucediendo. <javac> significa que está compilando un código Java. <java> significa que en realidad está ejecutando el código compilado. Probablemente esté creando un directorio para colocar los archivos .class, compilando el código, quizás creando Javadoc, etc.
MatrixFrog
4
  • Build es una versión compilada de un programa.
  • Compilar significa convertir (un programa) en un código de máquina o en un formulario de nivel inferior en el que se pueda ejecutar el programa.

En Java : Build is a Life tiene una secuencia de fases con nombre.

por ejemplo: maven tiene tres ciclos de vida de construcción, el siguiente es el defaultciclo de vida de construcción.

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.
Premraj
fuente
1

En Eclipse e IntelliJ, el proceso de compilación consta de los siguientes pasos: limpiar los paquetes anteriores, validar, compilar, probar, empaquetar,
integrar, verificar, instalar, implementar.

Sam
fuente
0

Compilar es solo convertir el código fuente a binario, compilar es compilar y vincular cualquier otro archivo necesario al directorio de compilación

patrick-fitzgerald
fuente