Pregunta

¿Qué me aporta realmente otra herramienta de compilación dirigida a Java?

Si usa Gradle en lugar de otra herramienta, ¿por qué?

¿Fue útil?

Solución

No consumo (sólo un proyecto de juguete hasta ahora) Gradle con ira a mí mismo [ autor significa que han utilizado Gradle sólo en un proyecto de juguete hasta el momento, no es que Gradle es un proyecto de juguete - ver comentarios] , pero yo diría que las razones se podría considerar el uso que sería debido a las frustraciones de Ant y Maven.

En mi experiencia hormiga es a menudo de sólo escritura (sí sé que es posible escribir bellamente modulares, elegantes construcción s, pero el hecho es que la mayoría de las personas no lo hacen). Para cualquier proyecto no trivial se convierte en la mente-flexión, y tiene mucho cuidado para asegurar que construye complejos son verdaderamente portátil. Su carácter imperativo puede conducir a la réplica de la configuración entre construye (aunque las macros pueden ayudar aquí).

Maven toma el enfoque opuesto y espera que le permite integrar completamente con el ciclo de vida de Maven. Ant usuarios experimentados encuentran este particular discordante como Maven elimina muchas de las libertades que tiene en hormiga. Por ejemplo hay una Sonatype el blog que enumera muchas de las críticas de Maven y sus respuestas.

El mecanismo de plugin de Maven permite configuraciones de construcción muy potentes, y el modelo de herencia significa que puede definir un conjunto pequeño de los POM padres que encapsulan sus configuraciones de construcción para toda la empresa y los proyectos individuales pueden heredar esas configuraciones, dejándolos ligero. configuración de Maven es muy prolijo (aunque Maven 3 promesas para hacer frente a esto), y si se quiere hacer nada que "no es el camino Maven" usted tiene que escribir un plugin o usar la integración Ant hacky. Nota resulta que como escribir plugins de Maven, pero aprecio que muchos oponerse al esfuerzo que supone.

Gradle promete golpear el punto dulce entre Ant y Maven. Utiliza enfoque Ivy 's para la resolución de dependencias. Permite la convención sobre configuración, pero también incluye tareas Ant como ciudadanos de primera clase. También permite que usted utilice sabiamente repositorios Maven / Ivy existentes.

Así que si usted ha golpeado y quedó atascado con cualquiera de los puntos de dolor Ant / Maven, es probable que vale la pena probar Gradle a cabo, aunque en mi opinión, queda por ver si no acaba de ser el comercio problemas conocidos para los desconocidos. La prueba del pudín está en el comer, así que me gustaría reservar el juicio hasta que el producto es un poco más maduro y otros han resuelto cualquier torcedura (lo llaman tener el último por una razón). Voy a seguir usando en mis proyectos de juguete embargo, siempre es bueno estar al tanto de las opciones.

Otros consejos

Gradle se puede utilizar para muchos propósitos - es una navaja suiza mucho mejor que la hormiga -. Pero se centró específicamente en multi-proyecto se basa

En primer lugar, Gradle es una herramienta de programación dependencia que también significa que es una herramienta de programación. Con Gradle puede ejecutar cualquier tarea al azar en su configuración y Gradle se asegurará de que todos los dependecies declarados se ejecutan en tiempo y forma. Su código se puede transmitir a través de muchos directorios en cualquier tipo de diseño (árbol, plana, dispersos, ...).

Gradle tiene dos fases distintas: evaluación y ejecución. Básicamente, durante la evaluación Gradle buscará y evaluar los scripts de creación de los directorios que se supone que mirar. Durante la ejecución Gradle ejecutará las tareas que se han cargado durante la evaluación teniendo en cuenta la tarea interdependencias.

Además de estas características de programación dependencia Gradle añade características del proyecto y de dependencia JAR por mimetismo en Apache Ivy. Como ya saben Ivy es una herramienta de gestión de la dependencia mucho más potente y mucho menos dogmático que, digamos, Maven.

Gradle detecta dependencias entre proyectos y entre los proyectos y JAR. Gradle trabaja con repositorios de Maven (carga y descarga) como el Ibiblio uno o sus propios repositorios, pero también apoya y otro tipo de infraestructura repositorio que pueda tener.

En multi-proyecto se basa Gradle es tanto adaptable y se adapta a la estructura y la arquitectura de la construcción. Usted no tiene que adaptar su estructura o arquitectura de su herramienta de construcción que se requeriría con Maven.

Gradle trata muy difícil no ponerse en su camino, un Maven esfuerzo casi nunca se hace. Convención es sin embargo tan buena es la flexibilidad. Gradle le da muchas más características que Maven hace, pero lo más importante en muchos casos Gradle le ofrecerá una ruta de transición indolora lejos de Maven.

Esto puede ser un poco controversial, pero Gradle no ocultar el hecho de que es un lenguaje de programación de pleno derecho.

Ant + ant-contrib es esencialmente un lenguaje de programación completo de Turing que en realidad nadie quiere programar en.

Maven intenta tomar el camino contrario de tratar de ser totalmente declarativa y te obliga a escribir y compilar un plugin si necesita lógica. También impone un modelo de proyecto que es completamente inflexible. Gradle combina la mejor de todas estas herramientas:

  • Se sigue la convención-sobre-configuración (Maven Ala), pero sólo en la medida en que desea que
  • Se le permite escribir tareas personalizadas flexibles como en la hormiga
  • Proporciona apoyo a los proyectos multi-módulo que es superior a ambos Ant y Maven
  • Se ha DSL que hace que el 80% y las cosas fáciles 20% lo posible (a diferencia de otras herramientas de construcción que hacen que el 80% fácil, 10% y 10% es posible efectivamente imposible).

Gradle es la herramienta de construcción más configurable y flexible todavía tengo que usar. Se requiere una cierta inversión por adelantado para aprender el DSL y conceptos como configuraciones pero si usted necesita un sin sentido y una herramienta de JVM construcción totalmente configurable que es difícil de superar.

Gradle bien combina Ant y Maven, tomando lo mejor de ambos marcos. Flexibilidad de hormiga y convención sobre configuración, gestión de la dependencia y plugins de Maven.

Así que si usted quiere tener una acumulación de Java estándar, al igual que en el experto, pero tarea de prueba tiene que hacer algún paso a medida que podría parecerse a continuación.

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

Además de eso se utiliza la sintaxis maravilloso que da mucho más poder expresión continuación xml ant / del experto.

Es un superconjunto de Hormiga - se puede utilizar todas las tareas Ant en Gradle con más bonito, maravilloso sintaxis similar, es decir,

.
ant.copy(file:'a.txt', toDir:"xyz")

o

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

Utilizamos Gradle y lo elegimos sobre Maven y Ant. Ant nos dio una flexibilidad total, e Ivy da una mejor gestión de la dependencia de Maven, pero no es un gran apoyo para multi-proyecto se basa. Se termina haciendo un montón de codificación para apoyar multi-proyecto se basa. También tener una cierta acumulación por convención es agradable y hace scripts de creación más concisa. Con Maven, se necesita construir por convención demasiado lejos, y la personalización de su proceso de construcción se convierte en un truco. Además, Maven promueve cada proyecto la publicación de un artefacto. A veces usted tiene un proyecto dividido en sub-proyectos, pero desea que todos los sub-proyectos que se construirán y versionado juntos. No es realmente algo Maven está diseñado para.

Con Gradle que puede tener la flexibilidad de hormiga y construir por convención de Maven. Por ejemplo, es trivial para extender el ciclo de vida de construcción convencional con su propia tarea. Y usted no está obligado a utilizar una convención si no quiere. Groovy es mucho más agradable para el código de XML. En Gradle, puede definir dependencias entre proyectos en el sistema de archivos local, sin la necesidad de publicar artefactos para cada uno a un repositorio. Por último, Gradle utiliza Ivy, por lo que tiene una excelente gestión de la dependencia. El único inconveniente para mí hasta ahora es la falta de integración madura Eclipse, pero las opciones para Maven no son realmente mucho mejor.

esto no es mi respuesta, pero definitivamente me resuena.Es de Radar tecnológico de ThoughtWorks de octubre de 2012:

Dos cosas han causado fatiga con herramientas de compilación basadas en XML como Ant y Maven:Demasiados aparatos óseos y la grosería de las arquitecturas enchufables.Si bien los problemas de sintaxis se pueden tratar a través de la generación, las arquitecturas enchufables limitan severamente la capacidad de construir herramientas para crecer con gracia a medida que los proyectos se vuelven más complejos.Hemos llegado a sentir que los complementos son el nivel incorrecto de abstracción, y prefieren herramientas basadas en el lenguaje como Gradle y Rake, porque ofrecen abstracciones de grano más fino y más flexibilidad a largo plazo.

Gradle devolvió la diversión al desarrollo y montaje de software.Utilicé ant para crear software durante toda mi carrera y siempre he considerado que la parte real de "construcción" del trabajo de desarrollo es un mal necesario.Hace unos meses, nuestra empresa se cansó de no utilizar un repositorio binario (también conocido como registrar archivos jar en los vcs) y me dieron la tarea de investigar esto.Comencé con hiedra, ya que se podía atornillar encima de una hormiga, no tuve mucha suerte al publicar mis artefactos construidos como quería.Opté por maven y pirateé xml, trabajé espléndido para algunas bibliotecas auxiliares simples, pero me encontré con serios problemas al intentar agrupar aplicaciones listas para implementar.Me molesté bastante buscando complementos en Google y leyendo foros y terminé descargando billones de archivos jar de soporte para varios complementos que me costó mucho usar.Finalmente opté por Gradle (me sentí bastante amargado en este punto y me molestó porque "¡No debería ser TAN difícil!").

Pero desde el primer día mi estado de ánimo empezó a mejorar.Estaba llegando a alguna parte.Me tomó como dos horas migrar mi primer módulo ant y el archivo de compilación básicamente no era nada.Una pantalla de fácil instalación.El gran "wow" fue:construir guiones en xml, ¿qué tan estúpido es eso?el hecho de que declarar una dependencia requiera UNA fila me resulta muy atractivo -> puedes ver fácilmente todas las dependencias de un determinado proyecto en una página.A partir de entonces estuve en una racha constante, para cada problema que enfrenté hasta ahora hay una solución simple y elegante.Creo que estas son las razones:

  • Groovy es muy intuitivo para los desarrolladores de Java.
  • La documentación es genial o impresionante.
  • la flexibilidad es infinita

Ahora paso mis días intentando pensar en nuevas funciones para agregar a nuestro proceso de construcción.¿Qué tan enfermo es eso?

También es mucho más fácil de manejar nativa construye. Ant y Maven son efectivamente Java solamente. existen algunos plugins de Maven que tratan de manejar algunos proyectos nativos, pero no hacen un trabajo eficaz. tareas de hormigas pueden ser escritos que compila proyectos nativos, pero son demasiado complejos y difíciles.

Lo hacemos Java con JNI y un montón de otros bits nativos. Gradle simplifica considerablemente nuestro desorden Ant. Cuando empezamos a introducir la gestión de la dependencia a los proyectos nativos era desordenado. Llegamos Maven para hacerlo, pero el código Gradle equivalente era una pequeña fracción de lo que se necesitaba en Maven, y la gente pudiera leerlo y entenderlo sin convertirse en gurús de Maven.

Estoy de acuerdo en parte con Ed Staub. Gradle definitivamente es más potente en comparación con maven y proporciona más flexibilidad a largo plazo.

Después de realizar una evaluación para pasar de Maven para Gradle, hemos decidido seguir a maven sí por dos cuestiones nos encontramos con Gradle (la velocidad es más lenta que la experta, delegación no funcionaba).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top