2009-07-07 23 views
11

Parece que la gestión de la dependencia de hormigas no es genial para decir lo menos ... Pero, ¿hay esperanza? Hoy hay mejores opciones para la administración de compilación o proyectos, como maven, ivy, pero estoy atrapado con un montón de proyectos de hormigas que dependen unos de otros, así que me preguntaba si existe una "mejor práctica" para administrar las dependencias.Ant dependency management

Específicamente en mi caso tengo:

w.war 

a.jar 
b.jar 
c.jar 

w.war es el archivo de la guerra despliego al servidor web. En el archivo war utilizo a.jar. a.jar depende de b.jar, así que felizmente empaqueto b.jar en w también ... Eso está más o menos bien hasta ... El problema comienza cuando b.jar depende de c.jar. El autor de a.jar conoce su dependencia de b.jar, por lo que puede empaquetar b.jar en w.war, pero no conoce la dependencia de b.jar en c.jar. Por otra parte, el autor de b.jar podría agregar más dependencias, como "b.jar depende de e.jar", por lo que el autor de a.jar no tiene ninguna posibilidad de seguir estas dependencias, ya que se suman.

Lo que me gustaría es definir "a depende de b" y "b depende de c" (en un archivo build.xml diferente) y usar hormiga mágica para compilarlos todos en w.war. ¿Es eso posible? Si no, ¿hay una mejor práctica?

Estoy cerca de reescribir todo en maven, pero es mucho trabajo ... ¿Hay esperanza para la hormiga?

+0

Utilizo mi propia extensión de gestión de dependencias para hormiga: http://trapdoor.org/projects/3/ Puede o no ayudar a su situación, pero me funciona bien. – Draemon

+0

Entonces la dependencia es bastante sutil (creo). Necesitas 'c.jar' para _use_' b.jar'; pero no necesita 'c.jar' para _build_' b.jar'. ¿Está bien? –

Respuesta

15

Si ya usas Ant, entonces tu mejor opción es utilizar Ivy para la administración de dependencias.

http://ant.apache.org/ivy/

Se proporciona un rico conjunto de tareas de hormigas para la manipulación de la dependencia.

3

Solo para desilusionarlo: ¡la administración de la dependencia en combinación con un sistema de compilación es difícil! A menos que tenga un ejemplo realmente simple, esto no es obvio, y tendrá que invertir algo de trabajo.

Si quieres o tienes que usar Ant, Ivy es definitivamente una buena opción. Al tratarse de un subproyecto oficial de Ant, se integra con relativa facilidad.

+2

Estoy más allá de las ilusiones, pero gracias ;-) – Ran

1

He estado usando Ivy durante los últimos 4 años (mucho antes de que se uniera a Apache) y no me arrepentí.

Sin saber mucho sobre sus archivos Ant, es un poco difícil dar una respuesta definitiva, pero creo que los proyectos se compilan de una vez. Esto significa que no pueden publicar individualmente sus artefactos (o archivos jar) en un repositorio central.

La solución es usar tanto un repositorio central (para bibliotecas comunes) como local (para su proyecto). Puedes echar un vistazo a mis proyectos públicos y especialmente al archivo ivysettings.xml porque usan exactamente este mismo principio.

0

Hay un nuevo sistema de generación de código abierto para Java llamó al EBuild (features) que es una excelente alternativa a Ant/Ivy, ya que es especialmente útil en la administración de dependencias.

Hay algunos artículos detallados sobre deficiencies of Ant y también Maven en el sitio.