2009-02-06 17 views
11

Estoy tratando de renovar nuestro proceso de compilación, que actualmente es un Ant build.xml gigantesco que llama a otros archivos de compilación de ant y ejecuta varias clases de Java para realizar una lógica más compleja que sería imposible/aterrador de intentar en Ant.¿Qué usas para un proceso de compilación complejo?

Antecedentes:

  • experiencia en Java y Ant, algunas plataformas
  • de Windows Groovy

Objetivos:

  • plazo como una combinación de cron línea de comandos y cuando una servlet se publica en
  • como simplifi como sea posible, pocos idiomas y rebotes entre técnicos

Necesito poder lógico de nivel superior que un lenguaje como Java proporciona y Ant es bastante fácil y utilizamos el filtrado para anular los archivos de propiedades predeterminados para diferentes clientes. Sobre todo me pregunto si hay algo más que Ant/Java que las personas usan.

+2

solamente correr, correr y gritando ..... – Skizz

Respuesta

8

Excepto la hormiga que usted ha mencionado y los scarry Marca/autotools, las herramientas principales son:

utilizo SCons, porque está basado en Python, bien financiado y elegante. Jam parece ser el más pragmático. No sé mucho sobre CMake. Maven puede ser la opción para usted, ya que está centrado en Java y tiene un nivel más alto que Ant.

más se puede encontrar en Wikipedia: List of built tools

+0

Maven es definitivamente una buena opción. –

+2

@Mark Davidson: Maven es solo una buena opción hasta que hayas probado una construcción compleja por un tiempo, hayas aprendido sobre el lado oscuro de Maven y luego hay que empezar de nuevo con otra herramienta. Maven te hará llorar, gritar y enloquecerte por cualquier cosa que no sea trivial. –

+1

Gradle parece muy interesante. Me gusta el hecho de que proporciona scripting junto con la integración de maven/ivy –

3

Me gusta usar Rake ya que puede recurrir a la potencia de todo el lenguaje Ruby y su biblioteca de marcos cuando sea necesario.

+0

y ¿qué pasa con el cuervo? :) – rkj

3

Uso Ant, sacando provecho de su macro feature. Si diseña su proyecto de forma consistente, puede eliminar gran parte de la duplicación escribiendo macros.

He estado creando un Antlib que contiene macros y tareas personalizadas que reutilizo en varios proyectos.

Alternativamente, algunas personas juran por Maven. Otras personas solo juran por Maven.

4

también echar un vistazo a

Mientras propósito más general a construir sistemas como SCons son muy poderosos, el soporte de Java es algo limitado en comparación con los sistemas especialmente diseñados para construir el proyecto de Java cts.

2

Uso Maven, no solo para compilación, también uso su extensión/dist.

En un par de comandos puedo tener el código que estaba en un control de fuente para compilar, empaquetar y liberar.

El complemento de publicación maneja la actualización de los números de versión, dist maneja cómo juntar todo y comprimirlo.

Hormiga parece difícil en comparación con Maven. Seguro que hay una curva de aprendizaje con Maven, pero leer un pom.xml es mucho más fácil que leer un build.xml.

Maven tiene que ser mucho menos detallado.

1

Me gusta Ant pero solo si dedica tiempo a escribir sus propios complementos de Java para encapsular acciones complejas. No es difícil, pero lamentablemente la mayoría de las personas intenta escribir su lógica en XML con las cosas ant-contrib. Creo que esto es un gran error.

He oído cosas buenas sobre el rastrillo y las herramientas geniales (mencionadas en otro comentario) pero no tengo experiencia con ellas.

Si usted está tratando de guión juntos varios pasos en un ciclo de vida que podrían ser mejor usar un servidor de construcción basada en la automatización de procesos como AnthillPro (Crucero, BuildForge y eléctrico-comandante son los otros en este espacio).

Otro lugar para hacer este tipo de preguntas es el CITCON mailing list. CITCON es una conferencia sobre integración y pruebas continuas y la lista de correo asociada se ha convertido en una gran comunidad en torno a este tipo de temas.

(soy un organizador para CITCON pero un trabajo de amor no es un fabricante de lucro. Realmente tiene una lista de correo de gran ayuda. Si me proxenetismo algo para el dinero sería The CI Guys. ;-))

7

Si persigue a Maven, entonces tendrá dos problemas: una construcción compleja y aprender la f @ * # ing "magia" de Maven. Maven simplemente empeora el problema porque es obtuso y excesivamente complicado.

Heredé una versión heredada de Maven 1.x en una gran compañía Fortune 500. Utilicé Maven 2.x por elección en muchos otros proyectos en los últimos años. Evalué a Maestro, con la esperanza de que Maven pudiera ser tratable. Mi conclusión, como la de muchas otras personas (revisa la 'red'), es que Maven es un gran paso en la dirección equivocada. Definitivamente no es una mejora sobre Ant.

He utilizado Ant durante MUCHOS años, incluida la escritura de una gran biblioteca de código abierto de scripts Ant helper. También he usado ampliamente su .NET primo nAnt. Sin embargo, Ant tiene dos fallas importantes. Primero, XML simplemente no es el lugar correcto para realizar tareas de compilación. Dos, Ant y XML no se adaptan bien a compilaciones grandes y complejas.De hecho, he escrito mucho aquí en SO sobre mis experiencias en ese campo (y con Maven).

Los líderes de la industria han llegado a la conclusión de que una construcción es simplemente otra aplicación, y se debe abordar utilizando herramientas de aplicación generales. Sin embargo, dado que se trata de una funcionalidad multiplataforma y de nivel de sistema, la mayoría de los lenguajes/plataformas de desarrollo no son adecuados (lo que incluye Java y, por lo tanto, Ant y Maven). Eso también excluye .NET.

Pasé dos años buscando una alternativa, y la encontré: Python. Tiene la combinación correcta de acceso a nivel de sistema, portabilidad multiplataforma, simplicidad, legibilidad, potencia, robustez y madurez. SCons, buildbot, setuptools/easyinstall y base Python son mi plataforma de destino actual para el proceso de compilación. Cuando sea necesario, la integración con Ant, Maven y cualquier otra herramienta similar es fácil. Mientras tanto, puedo utilizar estas herramientas para el núcleo de cualquier compilación en cualquier plataforma con cualquier idioma fuente. No más bloqueos, no más complejidad loca, no más guiones "declarativos" supuestamente útiles, no más black-box f @ * # ing "magic".

Si no puede cambiar a Python, intente con Ant + Ivy (en apache.org). Te proporciona el repositorio genial de Maven sin la mayoría de los males de Maven. Eso es lo que estoy haciendo también, donde sea necesario y adecuado.

Los mejores deseos.

+0

Encontré lo mismo con Maven. Extremadamente complicado, gran curva de aprendizaje, mucha MAGIA. Terminé en Groovy, pero principalmente no estoy familiarizado con Java y no tengo una integración con la hormiga. No he usado Python, pero he escuchado cosas buenas. – fooMonster

+1

Cambiar los lenguajes de programación debido a un sistema de compilación es ... cuestionable. Los sistemas de compilación Java concedidos son una mierda, pero vale la pena señalar que C/C++ fue en realidad peor. Todavía espero que alguien salga con un reemplazo Ant/Maven. – Gili

0

Utilizamos luntbuild. Es una aplicación web que es muy fácil de usar. Verificará desde CVS/SVN, incrementará automáticamente el número de versión/compilación, ejecutará las tareas de compilación en las secuencias de comandos ant y etiquetará su repositorio con la nueva versión. Puede programar compilaciones automáticas, hacer que lo envíe por correo electrónico o ponerse en contacto con usted a través de mensajería instantánea, también tiene seguridad y compilaciones de dependencias.

Todavía estamos usando la versión 1.2.3 pero veo que es hasta 1.6.0. Simplemente funciona.

http://luntbuild.javaforge.com/

EDIT: Al volver a leer su pregunta ahora veo que usted está buscando algo para reemplazar Ant. En nuestro caso, Ant no es realmente un problema. Tenemos proyectos configurados en Netbeans, que usa Ant para construir y solo tenemos que implementar algunos enganches en los scripts existentes proporcionados por Netbeans, lo cual es muy fácil de hacer.

EDITAR: Parece que puedes llamar a Ant de Groovy. Eso estaría bien porque entonces puedes volver a usar todas las tareas que ya existen para Ant.

http://groovy.codehaus.org/Using+Ant+from+Groovy

0

usar rastrillo donde quiera que pueda. Donde necesite construir código java, puede usarlo con jruby, o ver algo como: buildr

1

Stick con Ant, ya que está compilando Java. He mezclado Ant/SCons para algunos trabajos de JNI, pero en general me quedaría con Ant especialmente porque tienes una configuración de compilación existente en Ant. Portar a Maven será como empujar una clavija cuadrada a través de una pared sin agujeros.

Adopte su lógica Java personalizada para cualquiera y considere escribir tareas Ant adecuadas en lugar de ejecutar código Java externo. Resolví algunas partes muy complejas de nuestro proceso de compilación simplemente extendiendo Ant para hacer exactamente lo que necesitaba, ej. la gestión de icono recursos para un proyecto de interfaz gráfica de usuario de gran tamaño o inyectada subversión información directamente manifiestos información tarro (gracias SVNKit)

0

Trate FinalBuilder

Se proporciona una interfaz gráfica de usuario a lo que su proceso de construcción puede ser y tiene una acción nativo para casi todo, más un estudio de acción donde puedes crear el tuyo propio.

Con un poco de planificación puede ser muy eficiente.

+0

¡Además sus anuncios presentan a Jon Skeet! ¿Qué más quieres? –

1

me gustaría ir con Ant cualquier día de la semana.

No es perfecto; XML es muy detallado e implementar ninguna lógica en absoluto es casi imposible, pero incluso el técnico más joven en el equipo puede al menos entender lo que el archivo de la hormiga está haciendo en un día.

Lógica compleja puede ser reprogramado utilizando Java y se integra en la hormiga, si así lo desea. Ant le brinda todo el poder de Java :)

La resolución de dependencia es difícil sin importar el sistema que use. Con la hormiga, las mejores soluciones parecen ser un directorio lib en la que se almacenan todos sus tarros, o un servidor web interno de la cual las bibliotecas se copian en tiempo de compilación.

También tengo algo de experiencia con Maven 1 y Maven 2. Esa experiencia me dejó con la sensación de que Maven es increíble para proyectos de hobby, pero puede tener complicaciones para el software que necesita mantener en el tiempo.

veo dos problemas importantes con Maven:

  • Cualquier dependencia de importar utilizando Maven puede cambiar con el tiempo sin que usted lo sepa, lo que resulta en problemas extraños.
  • importar los certificados de no sólo el software que importar directamente utilizando Maven, sino también las licencias utilizadas por las bibliotecas que están indirectamente importados

En resumen, me gusta el hecho de que la acumulación depende del tiempo está comenzado. Eso puede ser un verdadero problema cuando se produce una versión de corrección de error un año después del lanzamiento de producción.

Por supuesto, estos problemas se pueden gestionar (tal vez utilizando un proxy Nexus) pero debe tenerlos en cuenta antes de reconstruir el sistema de compilación. En mi empresa, decidimos usar Ant para todos los proyectos nuevos y tratar de portar maven 1 y 2 a la hormiga siempre que se presente la ocasión. Es demasiado difícil mantenerlo funcionando.

Mi consejo, si usted y su equipo saben cómo tratar con hormiga, intenten refactorizar su archivo ant y no salten con alguna otra herramienta de compilación. Simplemente toma demasiado tiempo para hacerlo bien; tiempo que podrías gastar ganando dinero y sobreviviendo como una compañía :)

+0

Los problemas mencionados con Maven son engañosos. Las dependencias no cambian con el tiempo a menos que especifiques rangos intencionalmente. Las licencias no son diferentes con Maven que con cualquier otra cosa, excepto que quizás puedas ver lo que estás usando con Maven. –

0

Tengo que agregar a estas una solución que encuentro que no puedo vivir sin ... se llama Hudson. Solo toma unos segundos configurarlo y, por lo general, puede salirse con la suya con la mayor parte de lo que ya estén haciendo sus archivos ANT existentes.

Además, Hudson proporciona una excelente manera de construir "cron", ejecutar casos de prueba y generar "artefactos" (por ejemplo, crear productos) de forma que cualquiera pueda descargar.

Es difícil capturar todo lo que puede hacer por ti ... así que solo pruébalo ... no te decepcionará.

0

Maven es realmente una buena opción para hacer grandes construcciones ... en la mayoría de los casos donde no funciona es muy simple. La gente malinterpreta los conceptos de Maven. Si está trabajando con el "método maven", terminará con módulos más pequeños que le brindan una mejor arquitectura en su software. Por otro lado, cosas como Hudson lo ayudarán a reducir los tiempos de construcción mediante el uso de Maven, porque Hudson admite la creación de módulos modificados que no son compatibles con ninguna otra herramienta de compilación.El problema con Maven es aprender y comprender los conceptos de Maven, por ejemplo, la estructura de un proyecto (carpetas, etc.) o solo un artefacto, etc. El ciclo de compilación lo ayudará en diferentes áreas: compilación, empaquetado, implementación y lanzamiento que no es compatible con otras herramientas (solo si lo implementa a mano ... He escrito muchos scripts Ant grandes para llegar a esto) ... Otro problema, como los cambios a lo largo del tiempo, se producen al ignorar las mejores prácticas y señalar con un alfiler versiones que se utilizan.

-1

Uso principalmente Ant, pero Maven también es una buena herramienta. Con hormiga puedes hacer lo que quieras.

En nuestra empresa, creamos un generador de hormigas de propósito general que hace muchas cosas: compila, combina imágenes, minimiza, genera documentación, empaqueta archivos ... Es de código abierto y estamos abiertos a mejoras. Se puede conseguir aquí:

https://github.com/edertone/TurboBuilder

Cuestiones relacionadas