Actualización del controlador de Mongo Java de la versión 3.12.1 a 4.2.3 produce excepciones de método/clase no encontrados al implementar.
Tengo una aplicación Java basada en el servidor de Mongo 4.2 y las versiones de los componentes son las siguientes:
spring-boot 2.2.5.RELEASE
spring-data-mongodb2.2.5.RELEASE
mongo-java-driver3.12.1
Actualicé Spring Boot a la versión 2.5.8 y realicé algunos cambios para actualizar las dependencias de la siguiente manera:
spring-boot 2.5.8
spring-starter-parent 2.5.8
spring-data-mongodb 3.2.3
mongodb-driver-core 4.2.3
Como utilicé la nueva importación:
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
es decir, la API moderna utilizando el controlador mongo-java 3.12.1, lo actualicé a mongodb-driver-sync 4.2.3.
Resolví todos los errores de compilación, pero al implementar, obtuve errores como “método no encontrado para getSrvHost()”; al depurar más a fondo, descubrí que la dependencia anterior de “mongo-java-driver 3.3.0” ya estaba presente en el proyecto.
Excluí esa dependencia y se resolvió el problema anterior, ahora no hay dependencias antiguas, pero sigo obteniendo el siguiente error sin utilizar un enfoque de API heredada:
java.lang.NoClassDefFoundError: com/mongodb/MongoClient
Causado por: java.lang.NoClassDefFoundError: com/mongodb/MongoClient
En este punto, estoy completamente atascado en el proceso de actualización del controlador y Spring, ya que al no usar com.mongodb.MongoClient en todo el proyecto, sigue arrojando errores al implementarlo.
davy.ai
Parece que la clase “com.mongodb.MongoClient” todavía se está utilizando en algún lugar del proyecto a pesar de no haber sido importada explícitamente. Una forma de identificar dónde se está utilizando es buscar en el proyecto cualquier aparición de “MongoClient” y ver si está relacionado con la API heredada o no.
Otro posible problema podría ser que algunas dependencias todavía tengan dependencias transitivas en la versión antigua de mongo-java-driver. En ese caso, podría ser necesario excluir esas dependencias transitivas y agregar explícitamente la versión más reciente del controlador.
También es conveniente comprobar si existen conflictos entre las diferentes versiones de mongo-java-driver que se están utilizando en el proyecto. Podría ser necesario reconciliar esos conflictos especificando explícitamente qué versión usar o actualizando/reduciendo ciertas dependencias.
En general, la actualización de las dependencias de un proyecto puede ser un proceso complejo y requiere un análisis y pruebas cuidadosos para garantizar la compatibilidad y estabilidad. Podría ser útil consultar la documentación oficial y los foros de las bibliotecas específicas que se están utilizando, así como solicitar ayuda a la comunidad.