Cómo solucionar el error "Circular dependencies detected!"
Hace unos días, el equipo de PaperMC lanzó un nuevo sistema de carga de plugins. Algunos propietarios de servidores que ejecutan estas nuevas versiones de Paper (y posiblemente también forks) han comenzado a encontrar el siguiente error al iniciar su servidor:
¿Pero qué significa esto realmente?
Como el error puede sugerir, una dependencia circular ocurre siempre que un plugin depende de otro, que también depende del primer plugin. Sé que esto puede sonar confuso, así que aquí hay un ejemplo mejor:
Tenemos dos plugins en nuestro servidor, CoolLobbyPlugin y CoolCore. CoolLobbyPlugin` depende de CoolCore, esto es completamente normal y es soportado por el nuevo sistema de carga de plugins de Paper. Sin embargo, CoolCore también depende de CoolLobbyPlugin, creando una dependencia circular, que no es soportada.
Los bucles de dependencia de plugins como éste han causado problemas durante más de una década, rompiendo plugins regularmente (porque la solución era simplemente armar un orden de carga que a veces resultaba en resultados catastróficos). Con este nuevo sistema, Paper se niega a completar el arranque con estos bucles presentes.
Afortunadamente, hay una solución bastante sencilla para volver al sistema anterior de carga de plugins: Al establecer su valor en "true", Paper volverá al antiguo sistema de carga de plugins que hemos estado utilizando durante más de 10 años.
Para los servidores de Minecraft que se ejecutan en nuestros planes de alojamiento compartido, puede habilitar esta configuración siguiendo estos pasos:
Ten en cuenta que esta solución puede no funcionar indefinidamente, y siempre debes asegurarte de que no estás utilizando plugins con bucles de dependencia en ellos.
Navegue a la pestaña Startup de su servidor en el panel.
Desplácese hacia abajo hasta encontrar la opción "Paper legacy plugin loading" y actívela.
Ahora reinicia tu servidor para aplicar los cambios.
Ahora tu servidor debería utilizar el sistema de carga de plugins de legado.
La única solución real, sin embargo, sería que los desarrolladores de plugins se aseguraran de que su software no tiene bucles de dependencia. Puedes intentar ponerte en contacto con los autores de los plugins que aparecen en el mensaje de error y ver si están dispuestos a liberar una actualización para solucionar el problema. Sin embargo, es posible que la mayoría de los mantenedores de plugins populares ya lo sepan, así que dales unos días para que publiquen una actualización.
Asegúrate de que tus plugins no dependen unos de otros. Si tienes un plugin "core" que proporciona librerías que son utilizadas por uno o más de tus plugins, este plugin core nunca debería depender de tus otros plugins. Por supuesto, éstos pueden seguir dependiendo del núcleo a través del archivo plugin.yml, pero hacer que un plugin dependa de otro que también depende del primero causará problemas, ya que el archivo plugin.yml es el que dicta qué plugins se iniciarán primero. Desafortunadamente, esto está fuera del alcance de este artículo y no es algo en lo que podamos ayudarte. Si necesitas más ayuda con esto, dirígete a los foros de PaperMC o al servidor Discord.
Si necesita más ayuda, por favor crea un ticket aquí.
Creado por: Esteban M.
Circular dependencies detected!
You have a plugin that is depending on a plugin which refers back to that plugin. Your server will shut down until these are resolved, or the strategy is changed.
Circular dependencies:
GriefPrevention depends on TheUnderground depends on GriefPrevention...
ShopGUIPlus depends on WildStacker depends on ShopGUIPlus...
ExecutableItems depends on SCore depends on ExecutableItems...
SCore depends on CustomPiglinsTrades depends on SCore...
SCore depends on ExecutableBlocks depends on SCore...
SCore depends on ExecutableEvents depends on SCore...
SCore depends on SParkour depends on SCore...
If you would like to still load these plugins, acknowledging that there may be unexpected plugin loading issues, run the server with -Dpaper.useLegacyPluginLoading=true
¿Pero qué significa esto realmente?
¿Qué son las dependencias circulares y por qué ocurre esto?
Como el error puede sugerir, una dependencia circular ocurre siempre que un plugin depende de otro, que también depende del primer plugin. Sé que esto puede sonar confuso, así que aquí hay un ejemplo mejor:
Tenemos dos plugins en nuestro servidor, CoolLobbyPlugin y CoolCore. CoolLobbyPlugin` depende de CoolCore, esto es completamente normal y es soportado por el nuevo sistema de carga de plugins de Paper. Sin embargo, CoolCore también depende de CoolLobbyPlugin, creando una dependencia circular, que no es soportada.
Los bucles de dependencia de plugins como éste han causado problemas durante más de una década, rompiendo plugins regularmente (porque la solución era simplemente armar un orden de carga que a veces resultaba en resultados catastróficos). Con este nuevo sistema, Paper se niega a completar el arranque con estos bucles presentes.
Como propietario de un servidor, ¿qué puedo hacer?
Afortunadamente, hay una solución bastante sencilla para volver al sistema anterior de carga de plugins: Al establecer su valor en "true", Paper volverá al antiguo sistema de carga de plugins que hemos estado utilizando durante más de 10 años.
Para los servidores de Minecraft que se ejecutan en nuestros planes de alojamiento compartido, puede habilitar esta configuración siguiendo estos pasos:
Ten en cuenta que esta solución puede no funcionar indefinidamente, y siempre debes asegurarte de que no estás utilizando plugins con bucles de dependencia en ellos.
Navegue a la pestaña Startup de su servidor en el panel.
Desplácese hacia abajo hasta encontrar la opción "Paper legacy plugin loading" y actívela.
Ahora reinicia tu servidor para aplicar los cambios.
Ahora tu servidor debería utilizar el sistema de carga de plugins de legado.
La única solución real, sin embargo, sería que los desarrolladores de plugins se aseguraran de que su software no tiene bucles de dependencia. Puedes intentar ponerte en contacto con los autores de los plugins que aparecen en el mensaje de error y ver si están dispuestos a liberar una actualización para solucionar el problema. Sin embargo, es posible que la mayoría de los mantenedores de plugins populares ya lo sepan, así que dales unos días para que publiquen una actualización.
Soy el desarrollador de uno o más plugins que aparecen en el error. ¿Qué debo hacer?
Asegúrate de que tus plugins no dependen unos de otros. Si tienes un plugin "core" que proporciona librerías que son utilizadas por uno o más de tus plugins, este plugin core nunca debería depender de tus otros plugins. Por supuesto, éstos pueden seguir dependiendo del núcleo a través del archivo plugin.yml, pero hacer que un plugin dependa de otro que también depende del primero causará problemas, ya que el archivo plugin.yml es el que dicta qué plugins se iniciarán primero. Desafortunadamente, esto está fuera del alcance de este artículo y no es algo en lo que podamos ayudarte. Si necesitas más ayuda con esto, dirígete a los foros de PaperMC o al servidor Discord.
Si necesita más ayuda, por favor crea un ticket aquí.
Creado por: Esteban M.
Actualizado el: 15/04/2023
¡Gracias!