unimined / JvmDowngrader

Downgrades modern java bytecode to older versions. at either compile or runtime.
https://jvmdowngrader.wagyourtail.xyz
Other
48 stars 5 forks source link

ASM9_EXPERIMENTAL can only be used by classes compiled with --enable-preview #6

Closed DerMistkaefer closed 2 months ago

DerMistkaefer commented 2 months ago

Hello first, thanks for your work.

I am attempting to downgrade a Java 21 application to Java 17. However, I am encountering the following error.

I have tried setting the enable-preview argument for both the Java API projects and the main source. This argument has been available since Java 17. I have not yet tested setting this argument for the downgraded application.

You can find the code for the error class here.

I try to downgrade Paper 1.21 to Java17.

Exception in thread "main" java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        at xyz.wagyourtail.jvmdg.compile.PathDowngrader.downgradePaths(PathDowngrader.java:133)
        at xyz.wagyourtail.jvmdg.cli.Main.downgrade(Main.java:209)
        at xyz.wagyourtail.jvmdg.cli.Main.main(Main.java:105)
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:581)
        at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1021)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:58)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:45)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:26)
        at xyz.wagyourtail.jvmdg.compile.PathDowngrader.downgradePaths(PathDowngrader.java:62)
        ... 2 more
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        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 java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:540)
        at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:580)
        ... 7 more
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:581)
        at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1021)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:58)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:45)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:26)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$3$1.run(AsyncUtils.java:110)
        at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnable.exec(ForkJoinTask.java:1382)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        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 java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:540)
        at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:580)
        ... 11 more
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:581)
        ... 11 more
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:581)
        at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1021)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:58)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:45)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$1.get(AsyncUtils.java:26)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$3$1.run(AsyncUtils.java:110)
        at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnable.exec(ForkJoinTask.java:1382)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.tryRemoveAndExec(ForkJoinPool.java:1351)
        at java.base/java.util.concurrent.ForkJoinTask.awaitDone(ForkJoinTask.java:422)
        at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1018)
        ... 10 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        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 java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:540)
        at java.base/java.util.concurrent.ForkJoinTask.reportExecutionException(ForkJoinTask.java:580)
        ... 20 more
Caused by: java.lang.RuntimeException: Failed to downgrade alternate/current/wire/LevelHelper
        at xyz.wagyourtail.jvmdg.ClassDowngrader.downgrade(ClassDowngrader.java:311)
        at xyz.wagyourtail.jvmdg.compile.PathDowngrader$2.accept(PathDowngrader.java:87)
        at xyz.wagyourtail.jvmdg.compile.PathDowngrader$2.accept(PathDowngrader.java:70)
        at xyz.wagyourtail.jvmdg.util.AsyncUtils$3$2.run(AsyncUtils.java:127)
        ... 6 more
Caused by: java.lang.IllegalStateException: ASM9_EXPERIMENTAL can only be used by classes compiled with --enable-preview
        at xyz.wagyourtail.jvmdg.shade.asm.Constants.checkIsPreview(Constants.java:217)
        at xyz.wagyourtail.jvmdg.shade.asm.Constants.checkAsmExperimental(Constants.java:189)
        at xyz.wagyourtail.jvmdg.shade.asm.ClassVisitor.<init>(ClassVisitor.java:80)
        at xyz.wagyourtail.jvmdg.shade.asm.util.TraceClassVisitor.<init>(TraceClassVisitor.java:122)
        at xyz.wagyourtail.jvmdg.ClassDowngrader.downgrade(ClassDowngrader.java:303)
        ... 9 more
wagyourtail commented 2 months ago

what does it do without the printDebug flag... not including that should prevent the error you have there with the -all jar, as that's a bug with TraceClassVisitor, which is only used for some debug stuff

DerMistkaefer commented 2 months ago

Thank you, I was struggling with this yesterday. I have everything set up in a Docker environment and initially tested it plainly, which led to several other errors. It seems to work without debugging. But I was thinking that any output were useful.

When I start the application, it complains that the stubs are missing. After adding the stubs, I encounter an error stating that the stubs are not available in the correct Java version. I then downgraded the stubs with your downgrader. 😂

Then the server finally starts. It's a bit cumbersome, but it works. Thank you very much.

Initially, I used this JavaDowngrader, which worked perfectly with version 1.20.6, but unfortunately not with version 1.21.

wagyourtail commented 2 months ago

When I start the application, it complains that the stubs are missing

duplicate https://github.com/unimined/JvmDowngrader/issues/4#issuecomment-2164117321