Tenemos un sistema Java grande (> 500,000 LOC) que depende de 40-50 paquetes OSS . El sistema está construido con Ant, y la administración de dependencias es manejada manualmente en este momento. Estoy investigando Ivy y/o Maven al automatizar dependencias. Miramos a Maven como un sistema de automatización de compilación el año pasado y lo rechazamos porque requeriría totalmente reestructurar nuestro sistema para que coincida con la arquitectura de Maven. Ahora estoy buscando automatizar solo las tareas de administración de dependencias.Gran gestión de dependencias del sistema Java
He hecho algunos experimentos con Ivy pero he tenido problemas. Por ejemplo, cuando especifico ActiveMQ como una dependencia y le digo a Ivy que use los POM en el repositorio Maven para la especificación de dependencia, Ivy recupera un grupo de paquetes (Jetty, Derby y Geronimo para la instancia ) que sé que no son No era necesario usar solo ActiveMQ.
Si fijo usepoms = "false" en ivysettings.xml se obtiene sólo activemq.jar, pero que parece frustrar el propósito de hiedra y relega a un simple frasco-fetcher con manualmente incorporadas dependencia especificaciones .
Hay un problema mayor aquí, lo que solía llamarse "DLL Hell" en Windows. En algunos casos, dos dependencias directas de primer nivel indicarán diferentes versiones de la misma dependencia transitiva (para instancia log4j.jar). Solo un log4j.jar puede estar en el classpath, por lo que la resolución de dependencia implica determinar manualmente qué versión es compatible con todos sus clientes en nuestro sistema.
Supongo que todo se reduce a la calidad de cada paquete de dependencia especificación (el POM). En el caso de ActiveMQ, no hay declaraciones de alcance , por lo que cualquier referencia a ActiveMQ descargará todas sus dependencias a menos que excluyamos manualmente las que sabemos que no queremos .
En el caso de log4j, la resolución automática de dependencias requeriría que todos los clientes de log4j (otros paquetes que dependen de log4j) validar contra todas las versiones anteriores de log4j y proporcionan un rango (o lista) de las versiones de log4j compatibles en el POM. Probablemente también sea demasiado para preguntar.
¿Es este el estado actual de las cosas, o me falta algo?
+1 para una descripción clara del problema con los intentos de solución. Espero que tengas una buena respuesta. –
Las 4 mejores respuestas upvoted proporcionan una perspectiva valiosa. Kevin es conciso y preciso. Robert y Rich proporcionan muchos más detalles. Vladimir aporta una opinión positiva basada en la experiencia del mundo real. Los cuatro juntos me ayudan a establecer mis expectativas y señalar el camino hacia la solución del problema. Me gustaría "aceptar" las cuatro respuestas, pero SO no lo permite. Le doy la palabra a Robert Munteanu porque fue el primero con una respuesta detallada. –