¿Qué es una herramienta de construcción?

130

Durante los últimos 4 años, he estado programando con Eclipse (para Java) y Visual Studio Express (para C #). Los IDE mencionados siempre parecían proporcionar todas las facilidades que un programador podría solicitar (relacionadas con la programación, por supuesto).

Últimamente he estado escuchando sobre algo llamado "herramientas de construcción". Escuché que se usan casi en todo tipo de desarrollo del mundo real. ¿Qué son exactamente? ¿Qué problemas están diseñados para resolver? ¿Cómo es que nunca los necesité en los últimos cuatro años? ¿Son una especie de línea de comando despojado de IDEs?

Gaurang Agrawal
fuente

Respuestas:

117

¿Qué son las herramientas de construcción?

Las herramientas de compilación son programas que automatizan la creación de aplicaciones ejecutables a partir del código fuente (por ejemplo, .apk para la aplicación de Android). La construcción incorpora compilar, vincular y empaquetar el código en una forma utilizable o ejecutable.

Básicamente, la automatización de compilación es el acto de crear scripts o automatizar una amplia variedad de tareas que los desarrolladores de software realizan en sus actividades cotidianas, como:

  1. Descargando dependencias.
  2. Compilar código fuente en código binario.
  3. Empaquetando ese código binario.
  4. Ejecución de pruebas.
  5. Despliegue a sistemas de producción.

¿Por qué utilizamos herramientas de compilación o automatización de compilación?

En proyectos pequeños, los desarrolladores a menudo invocarán manualmente el proceso de compilación. Esto no es práctico para proyectos más grandes, donde es muy difícil hacer un seguimiento de lo que se necesita construir, en qué secuencia y qué dependencias hay en el proceso de construcción. El uso de una herramienta de automatización permite que el proceso de construcción sea más consistente.

Varias herramientas de compilación disponibles (nombrando solo unas pocas):

  1. Para java: Ant, Maven, Gradle.
  2. Para .NET Framework - NAnt
  3. c # - MsBuild.

Para leer más, puede consultar los siguientes enlaces:

1. Construir automatización

2. Lista de software de automatización de compilación

Gracias.

Ritesh Gune
fuente
17

Las herramientas de compilación son herramientas para administrar y organizar sus compilaciones, y son muy importantes en entornos donde hay muchos proyectos, especialmente si están interconectados. Sirven para asegurarse de que donde varias personas están trabajando en varios proyectos, no rompan nada. Y para asegurarse de que cuando realice sus cambios, tampoco rompan nada.

La razón por la que no ha oído hablar de ellos antes es porque no ha estado trabajando en un entorno comercial antes. Es probable que haya muchas cosas que no haya encontrado en un entorno comercial, especialmente si trabaja en casas de software.

Como han dicho otros, los ha estado utilizando, sin embargo, no ha tenido que considerarlos, porque probablemente ha estado trabajando de una manera diferente a la forma comercial habitual de trabajar.

Gato Schroedingers
fuente
10

Las herramientas de compilación generalmente se ejecutan en la línea de comandos, ya sea dentro de un IDE o completamente separadas de él.

La idea es separar el trabajo de compilar y empaquetar su código de la creación, depuración, etc.

Se puede ejecutar una herramienta de compilación en el comando o dentro de un IDE, ambos activados por usted. También pueden ser utilizados por herramientas de integración continua después de retirar su código de un repositorio y en una máquina de compilación limpia.

make fue una herramienta de comando temprana utilizada en entornos * nix para construir C / C ++.

Como desarrollador de Java, las herramientas de compilación más populares son Ant y Maven. Ambos se pueden ejecutar en IDEs como IntelliJ o Eclipse o NetBeans. También pueden ser utilizados por herramientas de integración continua como Cruise Control o Hudson.

duffymo
fuente
66
Ahora, Gradle también se usa ampliamente
asura
No de donde me siento. No estaba al tanto de Gradle, así que gracias por la referencia.
duffymo
@duffymo ¿Podrías dar más detalles sobre la última línea? ¿Qué es la integración continua? ¿Cómo se relacionan con las herramientas de construcción?
Quazi Irfan
4

Las herramientas de compilación generalmente son para transformar el código fuente en binarios: organiza el código fuente, establece indicadores de compilación, administra dependencias ... algunos de ellos también se integran con la prueba de unidad en ejecución, haciendo análisis estático, generando documentación.

Eclipse o Visual Studio también son sistemas de compilación (pero más de un IDE), y para Visual Studio es el msbuild subyacente para analizar los archivos de proyectos de Visual Studio bajo el capó.

El origen de todos los sistemas de compilación parece el famoso 'make'.

Existen sistemas de compilación para diferentes idiomas:

  1. C ++: make, cmake, premake
  2. Java: hormiga + hiedra, maven, gradle
  3. C #: msbuild

Por lo general, los sistemas de compilación utilizan un lenguaje específico de dominio propio (make, cmake) o xml (ant, maven, msbuild) para especificar una compilación. La tendencia actual es utilizar un lenguaje de secuencias de comandos real para escribir secuencias de comandos de compilación, como lua para premake y groovy para gradle, la ventaja de usar una secuencia de comandos es mucho más flexible y también le permite obtener un conjunto de estándares API (como compilación DSL).

Baiyan Huang
fuente
1

El Proceso de compilación es un proceso de compilación de su código fuente para cualquier error utilizando algunas herramientas de compilación y creando compilaciones (que son versiones ejecutables del proyecto). Nosotros (principalmente desarrolladores) hacemos algunas modificaciones en el código fuente y registramos ese código para que ocurra el proceso de compilación. Después del proceso de compilación, se obtienen dos resultados: 1. Compila PASSES y obtienes una versión ejecutable de tu proyecto (Build está listo). 2. Falla y obtiene ciertos errores y no se crea la compilación.

Existen diferentes tipos de procesos de compilación como: 1. Compilación nocturna 2. Compilación cerrada 3. Compilación de integración continua, etc.

Las herramientas de compilación ayudan y automatizan el proceso de creación de compilaciones.

* Entonces, en Short Build es una versión de software en formato de prelanzamiento utilizada por el equipo de desarrollo o desarrollo para ganar confianza en el resultado final de su producto al monitorear continuamente su producto y resolver cualquier problema temprano durante el proceso de desarrollo. * *

Prakash
fuente
¿Podría contarnos un poco más sobre las compilaciones de integración nocturna, cerrada y continua?
Quazi Irfan
@iamcreasy He agregado otra respuesta con respecto a su pregunta para explicación sobre las diferentes compilaciones. Puede encontrar esa explicación a continuación. También he agregado algunos enlaces para ayudarlo a comprender el proceso de compilación de una mejor manera.
Prakash
1

Estos son diferentes tipos de procesos mediante los cuales puede realizar sus compilaciones.

1. Integración continua de construcción:En este caso, los desarrolladores registran su código y, justo después de su registro, se inicia una compilación para la compilación de los cambios recientes, por lo que debemos saber si los cambios realizados por el desarrollador han funcionado o no justo después de que se haya realizado el registro. Esto se prefiere para proyectos más pequeños o componentes de los proyectos. En caso de que varios equipos estén asociados con el proyecto o haya un gran no. de los desarrolladores que trabajan en el mismo proyecto, este escenario se vuelve difícil de manejar como si hubiera 'n' no. de check-in y la compilación falla en ciertos puntos, es muy difícil rastrear si toda la rotura se ha producido debido a un problema o con múltiples problemas, por lo que si los problemas anteriores no se abordan correctamente, es muy difícil rastrearlos más tarde defectos que ocurrieron después de ese cambio.

2. Compilaciones de check-in cerradas: en este tipo de check-in, una compilación se inicia justo después de que se realiza el check-in manteniendo los cambios en un conjunto de estanterías. En este caso, si la compilación tiene éxito, se confirma el check-in de conjunto de estanterías; de lo contrario, no se comprometerá con Team Foundation Server. Esto proporciona una imagen ligeramente mejor de la construcción de integración continua, ya que solo los registros exitosos pueden comprometerse.

3. Compilaciones nocturnas: Esto también se conoce como compilaciones programadas. En este caso, programamos las compilaciones para que se ejecuten durante un tiempo específico con el fin de generar los cambios. Todos los cambios no confirmados anteriores de la última compilación se crean durante este proceso de compilación. Esto se practica cuando queremos registrarnos varias veces, pero no queremos una compilación cada vez que registramos nuestro código para que podamos tener un tiempo o período fijo en el que podamos iniciar la compilación para la compilación del código registrado.

Los detalles sobre estas compilaciones se pueden encontrar en la ubicación a continuación.

Verificación cerrada en Builds

Construcciones de integración continua

Construcciones nocturnas

Prakash
fuente
0

Los ha estado usando: IDE es una herramienta de compilación. Para la línea de comando puedes usar cosas como make.

La gente usa herramientas de línea de comandos para cosas como una compilación nocturna, por lo que por la mañana con una resaca el programador se da cuenta de que el código con el que ha estado jugando con las últimas compilaciones de las bibliotecas no funciona.

Ed Heal
fuente
11
Por lo general, el IDE no es una herramienta de compilación, sino que se integra con / llama a una herramienta de compilación. Por ejemplo, Visual Studio normalmente llama a MSBuild.
Justin
-1

"... es muy difícil hacer un seguimiento de lo que se necesita construir" - Las herramientas de construcción no ayudan con todo eso. Necesita saber lo que quiere construir. (Citado de la respuesta de Ritesh Gun)

"Escuché que se usan casi en todo tipo de desarrollo del mundo real". Por alguna razón, a los desarrolladores de software les gusta trabajar en grandes empresas. Parecen tener directivas de trabajo más poco claras para cada individuo que trabaja allí.

"Cómo es que nunca los necesité en los últimos cuatro años". Probablemente porque eres un programador experto.

Pseudo, meta. Creo que las herramientas de compilación no proporcionan ningún beneficio real en absoluto. Simplemente está ahí para agregar una sensación de seguridad derivada de las malas prácticas de la compañía, la falta de dirección: un mal liderazgo arquitectónico del software que conduce a un mal conocimiento real del proyecto. Nunca debería tener que usar herramientas de compilación (para pruebas) en su proyecto. Hacer pruebas aleatorias sin conocimiento del proyecto de software no ofrece ningún tipo de ayuda.

Nunca debe agregar algo a un proyecto sin saber su propósito y cómo funcionará con los otros componentes. Los componentes pueden ser funcionales por separado, pero no funcionan juntos. (Asumo, es responsabilidad del arquitecto de software).

¿Qué pasa si se agregan 4-5 componentes al proyecto? Agrega un sexto componente. Junto con el primer componente agregado, podría arruinar todo. Ninguna automática ayudaría a detectar eso.

No hay otro atajo que pensar pensar pensar.

Luego está la descarga automática de los repositorios. ¿Por qué querrías hacer eso? Necesita saber qué descarga, qué agrega al proyecto. ¿Cómo se detectan cambios en las versiones de los repositorios? Necesitas saber. No puedes "auto" nada.

¿Qué pasaría si tuviéramos que probar bicicletas y transportes de bebés con los ojos vendados con un palo y simplemente golpearlos al azar? Esa parece ser la idea de probar las herramientas de compilación.

Lo siento, no hay atajos https://en.wikipedia.org/wiki/Scientific_method y https://en.wikipedia.org/wiki/Analysis

Lealo
fuente
Su respuesta está muy sesgada desde el punto de vista de C, donde este es un problema enorme. Las herramientas de compilación son esenciales para cualquier cosa más compleja que ejecutar un compilador (incluso entonces, gcc es una palabra b masiva) y la gestión de dependencias con declaraciones de dependencia estrictas es una bendición. El hecho de que no lo use no significa que estos sean conceptos malos. Si simplemente está usando scripts de bash para compilar cosas, también es una herramienta de compilación, pero no muy buena. Si compila a mano o por medio de ide exclusivamente, entonces Dios puede estar con usted para compilaciones complejas y repetibles en diferentes sistemas.
RecursiveExceptionException