Me enfrenta el siguiente problema: Tengo un módulo en mi aplicación web que necesita jaxb 1.x y el otro módulo necesita jaxb 2.x. El primer módulo no funciona con la nueva versión de jaxb, y al revés. ¿Cómo puedo usar estos dos frascos en un proyecto? Gracias.java: use dos versiones de la misma lib en una sola aplicación web
Respuesta
Si está utilizando la implementación de referencia JAXB, entonces usted puede utilizar su JAXB 1 modelos con el JAXB 2 tiempo de ejecución al incluir el jaxb1-impl.jar.
Muchas gracias! – Nick
Tienes un problema grave. En términos generales, en un entorno Java normal es imposible resolver este problema. Debe forzar la modularización en su proyecto mediante el uso de OSGI. Punto de inicio: http://www.osgi.org/About/HowOSGi
Para una aplicación normal, generalmente versiones muy diferentes usan nombres de paquetes diferentes. Si este es el caso, puede usarlos a la vez sin problemas. Sin embargo, si son iguales, puede usar jarjar para cambiar el nombre del paquete.
Sin embargo, como utiliza un contenedor web, cada aplicación debe usar la versión que implementa y no la otra. es decir, el contenedor web lo resuelve para usted.
OSGi es otro contenedor que gestiona las versiones mucho más explícita y le dará más control sobre estos temas (sin embargo, creo que lo necesite sólo para esto)
Sí, puedo cambiar el nombre del paquete para un jar de jaxb 2.1, pero no quiero hacerlo. Es porque la solución es una 'suciedad'. OSGi sí, pero solo si no hay otra solución ... hm .... el cambio de nombre parece cada vez más adecuado) – Nick
Es a lo que se agregó la funcionalidad de cambio de nombre. He visto un único contenedor con cuatro versiones diferentes de Xerces que puede seleccionar en tiempo de ejecución. :-P –
Como dijo Shaman es imposible de resolver este problema.
Veamos: el contenedor de servlets JRE tiene solo un cargador de clases, y este cargador de clases puede cargar y usar una clase de jaxb u otra, pero no ambas que le darán una excepción de clase desconocida o algo similar.
No puede resolver esto directamente: puede obtener el código (es de código abierto) y cambiar el paquete de uno a otro nombre para que el cargador de clases pueda usar ambos. No te recomiendo esta solución, es una mala.
Mejor es que migre el código para utilizar la API más moderna (jaxb 2)
No se puede hacer eso. Porque no tienes todas las fuentes. ¿Hay alguna manera de cargar nuevas clases por mi cuenta? Por ejemplo, pongo toda la lógica y las dependencias en un solo jar y cargo su clase principal. Entonces lo llamo métodos de negocios. ¿Qué será si hago eso? – Nick
- 1. Cree dos versiones, lite y pro, de la misma aplicación
- 2. Dos versiones de jQuery en la misma página
- 3. Dos versiones diferentes de JQuery en la misma página HTML
- 4. compilar dos versiones de la misma aplicación de Android e instalar ambas en el mismo dispositivo
- 5. ¿Versiones para iPhone y iPad de la misma aplicación?
- 6. Android: varias versiones personalizadas de la misma aplicación
- 7. .NET: carga dos versiones de la misma DLL
- 8. Use una sola acción para múltiples modelos
- 9. Dos reinos en la misma aplicación con Spring Security?
- 10. Java: cargar dinámicamente varias versiones de la misma clase
- 11. /WEB-INF/classes vs/WEB-INF/lib
- 12. ¿Cómo controlar una aplicación web de una sola página?
- 13. ¿Puedo ejecutar dos servidores web en la misma computadora?
- 14. Despliegue de aplicación web y varias versiones
- 15. Control de versiones de una aplicación web de ASP.NET
- 16. ¿Cómo se manejan las versiones en una aplicación web?
- 17. ¿Está bien actualizar una aplicación web Java reemplazando solo archivos de una sola clase?
- 18. Ejecutando dos versiones de Java JDK
- 19. Versiones múltiples de SQL Server utilizando Entity Framework en una sola aplicación ASP.NET
- 20. Desarrollar la misma aplicación en dos computadoras diferentes
- 21. Desarrollo de proyectos de aplicación web Java para dos clientes
- 22. dividir dos veces en la misma expresión?
- 23. Dividir recuperado artefactos en dos lib separados
- 24. ¿Cómo cargar dos matrices en la misma tabla vista?
- 25. ¿Cómo ejecuto diferentes versiones de jQuery en la misma página?
- 26. ¿Varias versiones oficiales de Python en la misma máquina?
- 27. Versiones de desarrollo y producción de la misma aplicación en un solo dispositivo
- 28. Ejecutar una aplicación web java en IIS
- 29. ¿La misma palabra clave para dos propósitos en java?
- 30. Dos lanzadores para una sola actividad
Puede describir lo que entendemos por 'módulo en mi aplicación web'. Por ejemplo, ¿son módulos ejb separados o son solo capas separadas que comparten el mismo classpath? Además, ¿puede enumerar qué son las bibliotecas que tienen la dependencia de las jarras JAXB? –
Puede pensar en el módulo como de una lib (es más complicado, pero al final tengo archivos jar que están vinculados a mi aplicación web vía classpath). El primero es docx4j.jar y el segundo es un ayudante externo para trabajar con WebService. No puedo cambiar ni third third helper ni docx4j.jar – Nick