Elegir la herramienta de construcción correcta: Ant vs Maven vs Gradle
Durante el desarrollo de software, los desarrolladores tienen que reconstruir el mismo código una y otra vez. A menudo intentan usar scripts bash u otros idiomas de secuencias de comandos para automatizar la tarea. Sin embargo, hay herramientas de compilación disponibles que son más apropiadas para la automatización de compilación. Las herramientas de compilación predominantes son:
- APACHE ANT con Ivy
- Aturdir
- Graduarse
Investigamos las herramientas para obtener más.
APACHE ANT con Ivy
Apache Ant es una herramienta de línea de comandos basada en Java que usa archivos XML para definir scripts de compilación. Se usa predominantemente para construcciones de Java, pero también se puede usar para el desarrollo de C/C ++. Las tareas incorporadas proporcionan formas de compilar, ensamblar, probar y ejecutar aplicaciones de software. Los usuarios también pueden crear sus propias "Antillas" para mejorar la funcionalidad de las hormigas. Apache Ivy es una herramienta de gestión de dependencias que se integra fácilmente con Ant para proporcionar un ecosistema más robusto. El desarrollo de Ant comenzó en 2000.
Pros
- Un mejor control sobre el proceso general de construcción
- Lo suficientemente flexible como para trabajar con cualquier proceso de trabajo
Contras
- Los archivos de compilación basados en XML pueden crecer grandes y no mantenibles
- Se necesitan mucho tiempo y recursos para mantener los scripts de compilación
- La integración IDE es difícil de lograr
Hormiga con ejemplo de hiedra
Puede instalar la última hormiga desde aquí. Tienes que descargar la zip, expandir y poner la carpeta de bin en tu camino. Puede usar el siguiente comando para ver si Ant está instalada correctamente:
$ Ant -Version
Apache Ant (TM) versión 1.10.1 compilado el 2 de febrero de 2017
Una vez que tenga hormiga instalada, puede descargar el último frasco Ivy y ponerlo en la carpeta lib dentro del directorio de hormigas.
Después de que tenga hormiga instalada, cree carpetas Helloworld y Helloworld/SRC. Dentro de la carpeta SRC, pon Helloworld.archivo java con el código:
/****************************
Imprime "Hello World!"
****************************/
clase pública HelloWorld
public static void main (string [] args)
Sistema.afuera.println ("Hola mundo!");
Ahora en la carpeta Helloworld crea una compilación.archivo XML con el siguiente código:
Y en la misma carpeta de Helloworld, crea la hiedra.archivo XML con el siguiente código:
La estructura del directorio debe verse así:
Hola Mundo
|- construir.xml
|- Ivy.xml
'- SRC
'-- Hola Mundo.Java
Ahora puede ejecutar la compilación con el comando:
$ hormiga jarra
Una construcción exitosa debe proporcionar una salida como esta:
$ hormiga jarra
BuildFile:/Users/Zak/_Work/LearnBuildScripts/Learnant/Helloworld/Build.xml
resolver:
[Ivy: recuperar] :: Apache Ivy 2.4.0 - 20141213170938 :: http: // hormiga.apache.org/ Ivy/ ::
[Ivy: recuperar] :: Configuración de carga :: url = jar: archivo:/users/zak/buildTools/Ant/Apache
-Ant-1.10.1/lib/Ivy-2.4.0.frasco!/org/Apache/Ivy/Core/Settings/Ivysettings.xml
[Ivy: recuperar] :: Resolución de dependencias :: org.Apache#Helloworld; Working@Zakirs-
MacBook Air.local
[Ivy: recuperar] confs: [predeterminado]
[Ivy: Recuperar] Encontrado Junit#Junit; 4.12 en público
[Ivy: Recuperar] Funded Org.hamcrest#hamcrest-core; 1.3 en público
[Ivy: Recuperar] :: Informe de resolución :: Resolve 397MS :: Artifactos dl 15ms
---------------------------------------------------------------------
| | Módulos || artefactos |
| conf | Número | búsqueda | dwnlded | desalojado || Número | Dwnlded |
---------------------------------------------------------------------
| predeterminado | 2 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[Ivy: Recuperar] :: Recuperación :: org.Apache#Helloworld
[Ivy: recuperar] confs: [predeterminado]
[Ivy: recuperar] 0 artefactos copiados, 4 ya recuperados (0kb/39ms)
compilar:
[mkdir] creado dir:/users/zak/_work/learnBuildscripts/Learnant/Helloworld/Build/
clases
[javac]/users/zak/_Work/LearnBuildScripts/Learnant/Helloworld/Build.XML: 22: Advertencia:
'incluido el tiempo "no está configurado, por defecto para construir.sysclasspath = último; Establecer en falso
Para construcciones repetibles
[Javac] Compilar 1 archivo de origen a/usuarios/zak/_work/LearnBuildscripts/Learnant/
Helloworld/Build/Classes
frasco:
[mkdir] creado dir:/users/zak/_work/learnBuildscripts/Learnant/Helloworld/build/bin
[jar] construyendo jar:/usuarios/zak/_work/learnbuildscripts/learnant/helloworld/build/bin/
Hola Mundo.frasco
CONSTRUIR CON ÉXITO
Tiempo total: 6 segundos
Puede probar el archivo jar como este:
$ java -cp build/bin/helloworld.jar helloworld
Hola Mundo!
Hemos definido el archivo jar que se coloca en la carpeta de compilación/bin. Las carpetas se crean durante la compilación. El comando de la jar hormiga llama al objetivo jar en la compilación.xml.
Aturdir
Maven fue desarrollado para resolver los problemas que enfrentan las secuencias de comandos basadas en hormigas. Mantuvo los archivos XML pero adoptó un enfoque diferente para la organización. En Ant, los desarrolladores tienen que crear todas las tareas. Maven disminuye la creación de tareas mediante la implementación de estándares más fuertes para organizar el código. Como resultado, es más fácil comenzar en proyectos estándar.
También introdujo descargas de dependencia que facilitaron el desarrollo. Antes de la introducción de Ivy en ANT, los usuarios tenían que administrar las dependencias localmente. Maven adoptó primero la filosofía de gestión de dependencias.
Sin embargo, los estándares estrictos de Mavens dificultan escribir scripts de compilación personalizados. La herramienta es fácil de trabajar mientras el proyecto siga los estándares estrictos.
Pros
- Descargas de dependencia automática
- Todas las dependencias se registran automáticamente en el control de la fuente como parte de los scripts Maven
- Estandariza y simplifica el proceso de compilación
- Se integra fácilmente con IDES y sistemas CI/CD
Contras
- No flexible en la creación de flujos de trabajo personalizados
- Curva de aprendizaje empinada y el proceso es difícil de entender para los novatos
- Lento para resolver problemas de compilación e nuevas integraciones de biblioteca
- No es bueno con múltiples versiones de la misma dependencia
Ejemplo de maven
Puedes descargar el último Maven desde aquí. Puede verificar la instalación de esta manera:
$ MVN -Versión
Apache Maven 3.5.2 (138EDD61FD100EC658BFA2D307C43B76940A5D7D; 2017-10-18T00: 58: 13-07: 00)
Maven Home:/Users/Zak/BuildTools/Maven/Apache-Maven-3.5.2
Versión de Java: 1.8.0_74, proveedor: Oracle Corporation
Java Home:/Library/Java/JavavirtualMachines/JDK1.8.0_74.jdk/contenido/hogar/jre
Localidad predeterminada: EN_US, Codificación de plataforma: UTF-8
Nombre del sistema operativo: "Mac OS X", Versión: "10.11.6 ", Arch:" x86_64 ", familia:" Mac "
Cree una carpeta Helloworld y genere un proyecto con el siguiente comando:
$ mvn arquetipo: generar -dgroupid = com.nombre de empresa.Helloworld -DartifactId = Helloworld
-DarchetyPeartifactId = maven-archetype-quickstart -dinteractivEmode = false
Debería crear la estructura de la carpeta y generar la salida que se ve así:
[Información] Escaneo para proyectos ..
[Información]
[Información] ------------------------------------------------------------------------
[Info] Building Maven Stub Project (sin pom) 1
[Información] ------------------------------------------------------------------------
[Información]
[Info] >>> maven-archetype-plugin: 3.0.0: Generar (default-cli)> generar fuentes
@ Standalone-Pom >>>
[Información]
[Información] <<< maven-archetype-plugin:3.0.0:generate (default-cli) < generate-sources
@ Standalone-Pom <<<
[Información]
[Información]
[Info] --- Maven-Archetype-Plugin: 3.0.0: Generar (default-cli) @ standalone-pom ---
[Info] Generación del proyecto en modo por lotes
[Información] ----------------------------------------------------------------------------
[Información] Uso de los siguientes parámetros para crear un proyecto desde antiguo (1.x) Arquetipo:
maven-archetype-cickstart: 1.0
[Información] ----------------------------------------------------------------------------
[Info] parámetro: basado, valor:/usuarios/zak/_work/learnbuildscripts/learnmaven
[Info] parámetro: paquete, valor: com.nombre de empresa.Hola Mundo
[Info] parámetro: groupid, valor: com.nombre de empresa.Hola Mundo
[Info] Parámetro: ArtifactID, Valor: Helloworld
[Info] Parámetro: PackageName, Valor: COM.nombre de empresa.Hola Mundo
[Info] parámetro: versión, valor: 1.0-snapshot
[Información] Proyecto creado a partir de antiguos (1.x) Arquetipo en Dir:/Users/Zak/_Work/
LearnBuildScripts/Learnmaven/Helloworld
[Información] ------------------------------------------------------------------------
[Información] Desarrollar el éxito
[Información] ------------------------------------------------------------------------
[Información] Tiempo total: 8.602 s
[Información] Terminado en: 2018-01-27T00: 05: 37-08: 00
[Información] Memoria final: 15m/152m
[Información] ------------------------------------------------------------------------
La estructura de la carpeta debería verse así:
Hola Mundo
|- Pom.xml
'- SRC
|- Principal
| '- Java
| '- com
| '-- nombre de empresa
| '-- Hola Mundo
| '- Aplicación.Java
'-- prueba
'- Java
'- com
'-- nombre de empresa
'-- Hola Mundo
'- Comitta.Java
El pom.XML contiene las configuraciones de compilación. Dentro del pom.XML El código se ve así:
xsi: schemalocation = "http: // maven.apache.org/pom/4.0.0 http: // maven.apache.org/maven-v4_0
_0.XSD ">
4.0.0
comunicarse.nombre de empresa.Hola Mundo
Hola Mundo
frasco
1.0-snapshot
Hola Mundo
http: // maven.apache.organizar
junit
junit
3.8.1
prueba
Puede generar el archivo JAR utilizando el siguiente comando:
Paquete de $ MVN
[Información] Escaneo para proyectos ..
[Información]
[Información] ------------------------------------------------------------------------
[Información] Building Helloworld 1.0-snapshot
[Información] ------------------------------------------------------------------------
[Información]
[Info] --- Maven-Resources-Plugin: 2.6: Recursos (recursos predeterminados) @ helloworld ---
[Advertencia] Uso de la codificación de plataforma (UTF-8 en realidad) para copiar recursos filtrados, yo.mi.
la compilación depende de la plataforma!
[Info] omita ResourCedirectory/Users/Zak/_Work/LearnBuildscripts/Learnmaven/
Helloworld/SRC/Main/Resources
[Información]
[Info] --- Maven-Compiler-Plugin: 3.1: compilar (compile predeterminado) @ helloworld ---
[Información] Cambios detectados - Recompilar el módulo!
[ADVERTENCIA] La codificación de archivos no se ha establecido, utilizando una plataforma que codifica UTF-8, I.mi. la construcción es
dependiente de la plataforma!
[Info] Compilar 1 archivo de origen a/usuarios/zak/_work/LearnBuildscripts/Learnmaven/
Helloworld/Target/Classes
[Información]
[Info] --- Maven-Resources-Plugin: 2.6: testResources (predeterminado-testreSources) @
Hola Mundo ---
[Advertencia] Uso de la codificación de plataforma (UTF-8 en realidad) para copiar recursos filtrados, yo.mi.
la compilación depende de la plataforma!
[Info] omita ResourCedirectory/Users/Zak/_Work/LearnBuildscripts/Learnmaven/
HelloWorld/SRC/Test/Resources
[Información]
[Info] --- Maven-Compiler-Plugin: 3.1: testCompile (default-testcompile) @ helloworld ---
[Información] Cambios detectados - Recompilar el módulo!
[ADVERTENCIA] La codificación de archivos no se ha establecido, utilizando una plataforma que codifica UTF-8, I.mi. la construcción es
dependiente de la plataforma!
[Info] Compilar 1 archivo fuente a/Users/Zak/_Work/LearnBuildScripts/Learnmaven
/Helloworld/Target/Test-Classes
[Información]
[Info] --- Maven-Surfire-Plugin: 2.12.4: prueba (prueba predeterminada) @ helloworld ---
[Info] Directorio de informes SureFire:/usuarios/zak/_work/LearnBuildscripts/Learnmaven
/Helloworld/Target/
informes seguros
-------------------------------------------------------
T e s t s
-------------------------------------------------------
Corriendo com.nombre de empresa.Hola Mundo.Cotestre
Ejecutar pruebas: 1, fallas: 0, errores: 0, omitido: 0, tiempo transcurrido: 0.014 segundos
Resultados :
Ejecutar pruebas: 1, fallas: 0, errores: 0, omitido: 0
[Información]
[Info] --- Maven-Jar-Plugin: 2.4: jar (default-jar) @ helloworld ---
[Info] Building Jar:/Users/Zak/_Work/LearnBuildScripts/Learnmaven/Helloworld/Target/
Helloworld-1.0-snapshot.frasco
[Información] ------------------------------------------------------------------------
[Información] Desarrollar el éxito
[Información] ------------------------------------------------------------------------
[Información] Tiempo total: 5.624 S
[Información] Terminado en: 2018-01-27T00: 11: 10-08: 00
[Información] Memoria final: 16m/114m
[Información] ------------------------------------------------------------------------
Puede ejecutar el archivo jar como este:
$ java -cp objetivo/helloworld -1.0-snapshot.jar com.nombre de empresa.Hola Mundo.Aplicación
Hola Mundo!
El archivo jar se coloca en la carpeta de destino.
Graduarse
Gradle combina el poder de Ant and Maven. La primera versión de Gradle fue lanzada en 2012. Ha visto una adopción rápida. Google lo está utilizando actualmente para el sistema operativo Android.
En lugar de XML, Gradle usa el lenguaje maravilloso. Como resultado, los scripts de construcción en Gradle son más fáciles de escribir y leer. Inicialmente, estaba utilizando Ivy para la gestión de la dependencia, pero ahora está utilizando su propio motor de dependencia.
Pros
- Proporciona estandarización mientras se mantiene flexible
- Scripts de compilación fácil de leer y escribir
- Mejor para manejar múltiples versiones de dependencias
- Capaz de manejar múltiples lenguajes y tecnologías de programación
- Comunidad activa ayudando a desarrollar la herramienta
- Gradle DSL (lenguaje específico del dominio) lo hace estructura de configuración simple
- Gradle proporciona mejoras de rendimiento utilizando incrementalmente, construir caché y el demonio de gradle
Contras
- Integración IDE no tan buena como Maven
Ejemplo de graduación
Puedes instalar gradle desde aquí. Una vez que configure Gradle en su camino, puede verificarlo por:
$ Gradle -Versión
------------------------------------------------------------
Gradle 4.5
------------------------------------------------------------
Tiempo de construcción: 2018-01-24 17:04:52 UTC
Revisión: 77D0EC90636F43669DC794CA17EF80DD65457BEC
Groovy: 2.4.12
Ant: Apache Ant (TM) versión 1.9.9 compilado el 2 de febrero de 2017
JVM: 1.8.0_74 (Oracle Corporation 25.74-B02)
OS: Mac OS X 10.11.6 x86_64
A continuación, cree la siguiente estructura del directorio:
Hola Mundo
|- construir.graduarse
'- SRC
|- Principal
'- Java
'-- Hola Mundo
'-- Hola Mundo.Java
Para el helloworld.Java puso el código del ejemplo de hormiga. Y para construir.Gradle Poner el siguiente código:
Aplicar complemento: 'Java'
versión = '1.0 '
repositorios
mavencentral ()
dependencias
TestCompile Group: 'Junit', Nombre: 'Junit', Versión: '4.12 '
Puede usar el comando "Tasks de gradle -LOl" para ver todos los comandos disponibles. Gradle recoge automáticamente los complementos que especifica en la compilación.Gradle archivo y le muestra las tareas adicionales disponibles debido a los complementos.
Puedes obtener la construcción ejecutando:
$ Gradle Jar
Construir exitoso en 1s
2 tareas procesables: 2 ejecutadas
Puedes ejecutar tu frasco así:
$ java -cp build/libs/helloworld -1.0.jar helloworld
Hola Mundo!
El archivo JAR se coloca en la carpeta Build/Libs.
Conclusión
Entre las herramientas de compilación, Ant puede ser útil para proyectos más pequeños, mientras que Maven es mejor para asegurarse de que todos los desarrolladores sigan las mismas reglas. Gradle es la última herramienta que proporciona la mayor flexibilidad.
Referencias:
- http: // hormiga.apache.org/
- http: // hormiga.apache.org/Ivy/
- https: // maven.apache.org/
- https: // gradle.org/
- http: // makble.com/gradle-junit-zelloworld-examen
- https: // ejemplos.javacodegeeks.com/Core-Java/Gradle/Gradle-Hello-World-Tutorial/
- https: // gradle.org/Maven-VS-Gradle/
- https: // maven.apache.org/guías/ser iniciado/maven en cinco minutos.html
- https: // stackoverflow.com/Preguntas/20755437/Java-Build-Tools-Ant-VS-Maven
- https: // Conversaciones tecnológicas.com/2014/06/18/Toolas de construcción/
- https: // www.quora.com/what-what-the-pros-and-conso-saven-versus-ant-as-building-tools-for-java