fix(build): target Java 21 bytecode so 1.21 servers can load the plugin - #176
Merged
Conversation
#175 raised both the toolchain and the release to 25, which emits class file 69 and makes the plugin unloadable on any JVM below 25. Minecraft 1.21 requires Java 21, so stock servers at the low end of the supported range would fail with UnsupportedClassVersionError despite the API compatibility work in that PR. Nothing in the dependency chain justified the higher target: the Spigot API is class file 61 in both 1.21 and 26.2, and the highest bundled library is also 61. The sources use no language feature past 21 either. Keep building on JDK 25 and lower the emitted bytecode to 21 by splitting the single JAVA constant into JAVA_TOOLCHAIN and JAVA_RELEASE. The shipped jar now tops out at class file 65 and loads on Java 21 and newer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#175 raised both the toolchain and the release to 25, which emits class file 69 and makes the plugin unloadable on any JVM below 25. Minecraft 1.21 requires Java 21, so stock servers at the low end of the supported range would fail with UnsupportedClassVersionError despite the API compatibility work in that PR.
Nothing in the dependency chain justified the higher target: the Spigot API is class file 61 in both 1.21 and 26.2, and the highest bundled library is also 61. The sources use no language feature past 21 either.
Keep building on JDK 25 and lower the emitted bytecode to 21 by splitting the single JAVA constant into JAVA_TOOLCHAIN and JAVA_RELEASE. The shipped jar now tops out at class file 65 and loads on Java 21 and newer.
Description
Provide a brief description of what changes have been made.
If the error has been fixed, put:
Fixes: #(number of issue)
Have the changes been tested?