2008-11-08 14 views
8

Mi proyecto utiliza bibliotecas Java que tienen sus propias dependencias (Hadoop, Jetty, por ejemplo). Termino con diferentes versiones de las mismas dependencias, como ant 1.4.5, 1.4.6. Mi proyecto puede querer usar la hormiga 1.4.7. Este es un pequeño ejemplo, puede volverse más complicado con dependencias más grandes como HTTP Commons.Mezclar diferentes versiones de bibliotecas Java

¿Cómo puedo obtener todas las bibliotecas y dependencias para jugar bien? ¿Hay alguna forma de aislar cada biblioteca (Hadoop, Jetty) para que solo utilicen sus dependencias?

Respuesta

1

Si tiene el código fuente, compile todo junto. Si no lo hace, desafortunadamente tendrá que orientar su fuente al mínimo común denominador con la opción de destino a javac. Solo tiene que hacer esto si hay problemas reales al ejecutar la aplicación, que rara vez debería ser siempre que el jvm sea una versión actual (Java es muy estricto con respecto a la compatibilidad binaria con versiones anteriores).

2

Puede optar por administrar todo esto con un marco de gestión de dependencias - como OSGI. Eche un vistazo a los módulos dinámicos de marco de resorte http://www.springsource.org/osgi

También puede consultar la parte del marco donde Eclipse implementa OSGI. Eche un vistazo aquí http://www.eclipse.org/osgi/

La respuesta corta es solo para obtener el mínimo común denominador. Recuerde que el directorio 'endosado' es su amigo, cuando se trata de administrar dependencias conflictivas.

2

Maven generalmente también manejará esto bastante bien. Si no es completamente, al menos se encargará de la mayor parte del problema, entonces puedes resolver los problemas que quedan.

Por supuesto, eso significa que tienes que cambiar el proceso de construcción, pero puede valer la pena para no tirarte del pelo por esto.

2

JarJar al rescate!

Una ant tomas que tanto 1) paquetes de muchos frascos en uno, y 2) le permite cambiar el nombre de las dependencias en los archivos de clase y así cargar dos versiones de la misma biblioteca!

+0

sounds fancy www –

0

J G mencionó OSGi que fue mi primer pensamiento al leer esta pregunta.

Tener múltiples versiones de la misma biblioteca es un punto fuerte en OSGi. Si ya mencionamos algunos productos de terceros, creo que es justo mencionar las especificaciones que lo respaldan.

Puede obtenerlo desde el sitio oficial de Osgi http://osgi.org

Cuestiones relacionadas