google / guice

Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 11 and above, brought to you by Google.
https://github.com/google/guice
Apache License 2.0
12.48k stars 1.67k forks source link

Request/Question: Provide non-jarjar'd builds #1769

Open cortlepp opened 11 months ago

cortlepp commented 11 months ago

Hi, I am currently trying to update an application using guice 5.1.0 to Java 21. For operational reasons we currently cannot update to 6.0.0/7.0.0 (but will do so soon). In the meantime we would like to stay with guice 5.1.0 but still do the java update.

When trying to start my application, I got this error:

Suppressed: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Unsupported class file major version 65
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2086)
        at com.google.common.cache.LocalCache.get(LocalCache.java:4012)
        at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4035)
        at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5013)
        at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5020)
        at com.google.inject.internal.FailableCache.get(FailableCache.java:54)
        at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:49)
        at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:152)
        at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:605)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:943)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:863)
        at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:300)
        at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:223)
        at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:949)
        at com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:48)
        at com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:60)
        at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:137)
        at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
        at com.google.inject.Guice.createInjector(Guice.java:87)
        at com.google.inject.Guice.createInjector(Guice.java:78)
        at com.intershop.beehive.objectgraph.guice.internal.GuiceObjectGraphFactory.createObjectGraph(GuiceObjectGraphFactory.java:94)
        at com.intershop.beehive.objectgraph.guice.internal.TestObjectGraphFactory.createObjectGraph(TestObjectGraphFactory.java:117)
        at com.intershop.platform.objectgraph.internal.ObjectGraphEngineImpl.loadObjectGraph(ObjectGraphEngineImpl.java:87)
        at com.intershop.beehive.core.internal.environment.ServerEnvironmentImpl.createGlobalObjectGraph(ServerEnvironmentImpl.java:885)
        at com.intershop.beehive.core.internal.environment.ServerEnvironmentImpl.onInitHook(ServerEnvironmentImpl.java:836)
        at com.intershop.beehive.core.internal.environment.ServerEnvironmentImpl.startup(ServerEnvironmentImpl.java:313)
        ... 3 common frames omitted
    Caused by: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Unsupported class file major version 65
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2086)
        at com.google.common.cache.LocalCache.get(LocalCache.java:4012)
        at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4035)
        at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5013)
        at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5020)
        at com.google.inject.internal.FailableCache.get(FailableCache.java:54)
        at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:69)
        at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:75)
        at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:30)
        at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:38)
        at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:34)
        at com.google.inject.internal.FailableCache$1.load(FailableCache.java:43)
        at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3571)
        at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2313)
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2190)
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2080)
        ... 28 common frames omitted
    Caused by: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: Unsupported class file major version 65
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2086)
        at com.google.common.cache.LocalCache.get(LocalCache.java:4012)
        at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4035)
        at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5013)
        at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5020)
        at com.google.inject.internal.util.StackTraceElements.forMember(StackTraceElements.java:67)
        at com.google.inject.internal.SourceFormatter.formatMember(SourceFormatter.java:91)
        at com.google.inject.internal.SourceFormatter.format(SourceFormatter.java:53)
        at com.google.inject.internal.MissingImplementationErrorHints.getSuggestions(MissingImplementationErrorHints.java:82)
        at com.google.inject.internal.MissingImplementationError.<init>(MissingImplementationError.java:21)
        at com.google.inject.internal.Errors.missingImplementationWithHint(Errors.java:165)
        at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:103)
        at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:715)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:941)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:863)
        at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:300)
        at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:223)
        at com.google.inject.internal.SingleFieldInjector.<init>(SingleFieldInjector.java:39)
        at com.google.inject.internal.MembersInjectorStore.getInjectors(MembersInjectorStore.java:131)
        at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:97)
        at com.google.inject.internal.MembersInjectorStore.access$000(MembersInjectorStore.java:40)
        at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:49)
        at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:45)
        at com.google.inject.internal.FailableCache$1.load(FailableCache.java:43)
        at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3571)
        at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2313)
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2190)
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2080)
        ... 43 common frames omitted
    Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65
        at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:199)
        at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:180)
        at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:166)
        at com.google.inject.internal.asm.$ClassReader.<init>(ClassReader.java:287)
        at com.google.inject.internal.util.LineNumbers.<init>(LineNumbers.java:69)
        at com.google.inject.internal.util.StackTraceElements$1.load(StackTraceElements.java:48)
        at com.google.inject.internal.util.StackTraceElements$1.load(StackTraceElements.java:44)
        at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3571)
        at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2313)
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2190)
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2080)
        ... 70 common frames omitted

After trying for some time to get guice to take my provided asm version instead of the original one (and failing at it), I discovered what you do with jarjar.

I have now locally built guice 5.1.0 with jarjar disabled and it seems to work now with my application with Java 21 (so far).

Now my question: do you (or anyone else you are aware of) provide builds of guice with jarjar disabled?

And a request on the side: PLEASE provide some more documentation about what you do with JarJar, I had to decompile your code and read your build scripts, to by chance discover your usage of JarJar (and what that does).