Skip to content

Dynamic dependency loading fails on version upgrade due to for e.g. relocation. #945

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
vLuckyyy opened this issue May 25, 2025 · 1 comment · Fixed by #946
Closed

Dynamic dependency loading fails on version upgrade due to for e.g. relocation. #945

vLuckyyy opened this issue May 25, 2025 · 1 comment · Fixed by #946
Assignees
Labels
🐛 bug Something isn't working 🌍 for the sake of humanity Humanity will die without it

Comments

@vLuckyyy
Copy link
Member

vLuckyyy commented May 25, 2025

There is an issue with dynamic dependency loading in EternalCore plugin when upgrading versions.

  • In version 1.4.0, OrmLite was not relocated, and everything worked fine.
  • In version 1.6.0, OrmLite is relocated, but the system does not properly handle this relocation during upgrades.
  • When upgrading from 1.4.0 to 1.6.0 (with old libraries already downloaded), the plugin fails to load and throws a NoClassDefFoundError.
  • Fresh installs of 1.6.0 work correctly.
  • This problem is not limited to OrmLite and would occur with any other dependency that changes relocation between versions.

This is NOT OrmLite’s fault! It’s a pure coincidence. The same error could happen with any other libraries.

Steps to reproduce:

  1. Install EternalCore 1.4.0 (without relocation).
  2. Upgrade to 1.6.0 without clearing old libraries.
  3. Observe the failure to load due to missing relocated classes.

Expected behavior:
The system should detect relocation changes and convert or reload dependencies properly to avoid runtime errors.

Stacktrace:

[19:36:08 INFO]: [EternalCore] Enabling EternalCore v1.6.0
[19:36:08 INFO]: [EternalCore] Searching for dependencies
[19:36:09 INFO]: [EternalCore] Found 5 dependencies
[19:36:09 INFO]: [EternalCore] Downloaded org.ow2.asm:asm-commons:9.7.1 from https://repo.maven.apache.org/maven2
[19:36:09 INFO]: [EternalCore] Downloaded org.ow2.asm:asm-tree:9.7.1 from https://repo.maven.apache.org/maven2
[19:36:09 INFO]: [EternalCore] Downloaded org.ow2.asm:asm:9.7.1 from https://repo.maven.apache.org/maven2
[19:36:09 INFO]: [EternalCore] Searching for dependencies
[19:36:17 INFO]: [EternalCore] Found 53 dependencies
[19:36:17 INFO]: [EternalCore] Downloaded net.kyori:adventure-platform-api:4.3.4 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded net.kyori:adventure-key:4.18.0 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded com.google.errorprone:error_prone_annotations:2.36.0 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded org.jspecify:jspecify:1.0.0 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded net.kyori:adventure-text-serializer-bungeecord:4.3.4 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded net.kyori:adventure-platform-facet:4.3.4 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded dev.triumphteam:triumph-gui:3.1.11 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded net.dzikoysk:cdn:1.14.6 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded net.kyori:adventure-platform-viaversion:4.3.4 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded net.kyori:adventure-platform-bukkit:4.3.4 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded org.checkerframework:checker-qual:3.48.3 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded com.zaxxer:HikariCP:6.2.1 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded net.kyori:adventure-api:4.18.0 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded commons-io:commons-io:2.18.0 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded com.github.ben-manes.caffeine:caffeine:3.2.0 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded org.postgresql:postgresql:42.7.5 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded org.mariadb.jdbc:mariadb-java-client:3.5.2 from https://repo.maven.apache.org/maven2
[19:36:17 INFO]: [EternalCore] Downloaded com.h2database:h2:2.3.232 from https://repo.maven.apache.org/maven2
[19:36:18 INFO]: [EternalCore] Downloaded dev.rollczi:litecommands-adventure-platform:3.9.7 from https://repo.panda-lang.org/releases
[19:36:18 INFO]: [EternalCore] Downloaded dev.rollczi:litecommands-adventure:3.9.7 from https://repo.panda-lang.org/releases
[19:36:18 INFO]: [EternalCore] Downloaded dev.rollczi:litecommands-framework:3.9.7 from https://repo.panda-lang.org/releases
[19:36:18 INFO]: [EternalCore] Downloaded dev.rollczi:litecommands-annotations:3.9.7 from https://repo.panda-lang.org/releases
[19:36:18 INFO]: [EternalCore] Downloaded dev.rollczi:litecommands-core:3.9.7 from https://repo.panda-lang.org/releases
[19:36:18 INFO]: [EternalCore] Downloaded com.eternalcode:multification-core:1.2.1 from https://repo.eternalcode.pl/releases
[19:36:18 INFO]: [EternalCore] Downloaded dev.rollczi:litecommands-bukkit:3.9.7 from https://repo.panda-lang.org/releases
[19:36:18 INFO]: [EternalCore] Downloaded com.eternalcode:multification-cdn:1.2.1 from https://repo.eternalcode.pl/releases
[19:36:19 INFO]: [EternalCore] Downloaded com.eternalcode:multification-bukkit:1.2.1 from https://repo.eternalcode.pl/releases
[19:36:19 INFO]: [EternalCore] Downloaded com.eternalcode:eternalcode-commons-adventure:1.1.6 from https://repo.eternalcode.pl/releases
[19:36:19 INFO]: [EternalCore] Downloaded com.eternalcode:eternalcode-commons-shared:1.1.6 from https://repo.eternalcode.pl/releases
[19:36:20 INFO]: [EternalCore] Downloaded com.eternalcode:eternalcode-commons-bukkit:1.1.6 from https://repo.eternalcode.pl/releases
[19:36:21 INFO]: [EternalCore] Downloaded dev.rollczi:litecommands-programmatic:3.9.7 from https://repo.panda-lang.org/releases
[19:36:21 INFO]: [EternalCore] Your server is running on supported software, congratulations!
[19:36:21 INFO]: [EternalCore] Server version: 21
[19:36:21 ERROR]: [EternalCore] Unable to load class: com.eternalcode.core.database.persister.LocationPersister
[19:36:22 ERROR]: Error occurred while enabling EternalCore v1.6.0 (Is it up to date?)
java.lang.RuntimeException: Can not enable EternalCore: 
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.loader.EternalCoreWrapper.enable(EternalCoreWrapper.java:32) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.loader.EternalCoreLoader.onEnable(EternalCoreLoader.java:26) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:288) ~[pufferfish-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:202) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:109) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:520) ~[pufferfish-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.CraftServer.enablePlugin(CraftServer.java:655) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:604) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:769) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:531) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:328) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1236) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:341) ~[pufferfish-1.21.3.jar:1.21.3-27-04bc249]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.NoClassDefFoundError: com/eternalcode/core/libs/com/j256/ormlite/dao/Dao
        at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[?:?]
        at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3578) ~[?:?]
        at java.base/java.lang.Class.getDeclaredMethods(Class.java:2676) ~[?:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.injector.scan.DependencyScanner.getFieldAndMethodCandidates(DependencyScanner.java:119) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.injector.scan.DependencyScanner.createBeanCandidates(DependencyScanner.java:87) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.injector.scan.DependencyScanner.scan(DependencyScanner.java:74) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.injector.scan.DependencyScanner.scan(DependencyScanner.java:60) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.EternalCore.<init>(EternalCore.java:79) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[?:?]
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) ~[?:?]
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) ~[?:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.loader.EternalCoreWrapper.enable(EternalCoreWrapper.java:25) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        ... 13 more
Caused by: java.lang.ClassNotFoundException: com.eternalcode.core.libs.com.j256.ormlite.dao.Dao
        at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:199) ~[pufferfish-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:166) ~[pufferfish-api-1.21.3-R0.1-SNAPSHOT.jar:?]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?]
        at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[?:?]
        at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3578) ~[?:?]
        at java.base/java.lang.Class.getDeclaredMethods(Class.java:2676) ~[?:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.injector.scan.DependencyScanner.getFieldAndMethodCandidates(DependencyScanner.java:119) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.injector.scan.DependencyScanner.createBeanCandidates(DependencyScanner.java:87) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
        at EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar/com.eternalcode.core.injector.scan.DependencyScanner.scan(DependencyScanner.java:74) ~[EternalCore v1.6.0 (MC 1.17.x-1.21.x).jar:?]
@github-project-automation github-project-automation bot moved this to 📋 Backlog in EternalCore May 25, 2025
@vLuckyyy vLuckyyy moved this from 📋 Backlog to 📋 TODO in EternalCore May 25, 2025
@vLuckyyy vLuckyyy added 🐛 bug Something isn't working 🌍 for the sake of humanity Humanity will die without it labels May 25, 2025
@vLuckyyy
Copy link
Member Author

vLuckyyy commented Jun 7, 2025

Image

@vLuckyyy vLuckyyy assigned Jakubk15 and Rollczi and unassigned Jakubk15 Jun 7, 2025
vLuckyyy pushed a commit that referenced this issue Jun 14, 2025
…ing dependencies (#946)

* Fix relocation updates

* More fixes

* Run dependency scanner in parallel

* Close ExecutorService
@github-project-automation github-project-automation bot moved this from 📋 TODO to ✅ Done in EternalCore Jun 14, 2025
@vLuckyyy vLuckyyy reopened this Jun 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working 🌍 for the sake of humanity Humanity will die without it
Projects
Archived in project
3 participants