2010-04-16 24 views
90

Pensando que la respuesta a esto es bastante obvio, pero aquí va:Edificio vs compilación (Java)

Cuando estoy trabajando en un proyecto pequeño para la escuela (en Java) que compila ella.

En mi cooperativa estamos utilizando la hormiga a compilación nuestro proyecto.

creo que la compilación es un subconjunto del edificio. ¿Es esto correcto? ¿Cuál es la diferencia entre construir y compilar?

relacionadas:
What is the difference between compiling and building?

Respuesta

156

La "compilación" 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. Fuentes de generación (a veces).
  2. Fuentes de compilación.
  3. Compilación de fuentes de prueba.
  4. Pruebas de ejecución (pruebas unitarias, pruebas de integración, etc.).
  5. Envasado (en tarro, guerra, ejb-jar, oreja).
  6. Ejecución de controles 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 continuamente la compilación que se conoce como Continuous Integration).

+1

Bellamente escrito y muchas gracias. –

+1

¿Por qué llamarlo "Integración continua" en lugar de "Construcción continua"? –

+0

@Pascal, Re * "ejecutar la compilación de forma continua" * .. "la * compilación *" se refiere a? – Pacerier

8

En palabras sencillas

Compilación traduce el código de Java ( humano legible) en bytecode, por lo que la máquina virtual entiende.

El edificio reúne todas las partes compiladas y crea (construye) un ejecutable .

+0

Lo que estamos hablando es de "Interpretación" ... se está convirtiendo compilación del código legible por humanos en código máquina – mortsahl

+0

@ Tom, ¿Quiere decir un "ejecutable" o "** ** frasco ejecutable"? – Pacerier

21

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

La vinculación de es el acto de combinar el código objeto con las bibliotecas en un ejecutable sin procesar.

La construcción de es la secuencia compuesta de compilar y une, con posiblemente otras tareas tales como la creación instalador.

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

What is the difference between compile code and executable code?

+0

Algunas otras tareas posibles: mejora (JDO), Javadoc-ing, empaquetado y firma. Además, algunos entornos incluyen la ejecución de pruebas automáticas de unidad/regresión como parte de una "compilación". –

+0

Normalmente, cuando se construyen proyectos Java no existe un paso de enlace y no se produce ningún ejecutable sin formato.Por el contrario, las clases compiladas se empaquetan juntas en un archivo .jar como parte de la compilación. (O .war, o .ear, dependiendo del entorno de destino). – markusk

+7

Dude, esto es puro copy & paste y ni siquiera es apropiado para Java ... –

4

En realidad ustedes están haciendo lo mismo. Ant es un sistema de compilación basado en archivos de configuración XML que puede 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, montar cremalleras y jarras y compilar otros idiomas, como C.

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

búsqueda Ant y Maven para más detalles.

+0

También puede ver qué está haciendo realmente la hormiga mirando el archivo de compilación (lo más probable es que se llame build.xml). Incluso si no está familiarizado con la sintaxis, puede ver qué está sucediendo. significa que está compilando código 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, tal vez creando algún Javadoc, etc. – MatrixFrog

0

La compilación es simplemente convertir el código fuente a binario, la construcción está recopilando y la vinculación de otros archivos necesarios en el directorio de construcción

29

Algunas de las respuestas que vemos aquí son fuera de contexto y más sentido si este fueron una pregunta C/C++.

versión corta:

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

.

"Building" es un genérico término 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 .jar, o "clean" que limpia los archivos .class y los directorios temporales.

1

tldr;

  • Construir 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 puede ejecutar el programa.

En Java: Build es un ciclo de vida que contiene una secuencia de fases nombradas.

por ejemplo: maven tiene tres ciclos de vida de compilación, el siguiente es default ciclo de vida de compilació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.