ContextMapper / context-mapper-cli

Context Mapper Command Line Interface (CLI)
https://contextmapper.org/
Apache License 2.0
15 stars 3 forks source link

Latest published binary (v6.6.1 tarball) does not run out of the box on Java 17 #7

Closed sacharya1980 closed 1 year ago

sacharya1980 commented 2 years ago
➜  ./context-mapper-cli-6.6.1/bin/cm generate -g context-map -i foo.cml
Context Mapper CLI v6.6.1
Exception in thread "main" com.google.inject.internal.util.$ComputationException: com.google.inject.internal.util.$ComputationException: java.lang.ExceptionInInitializerError
    at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553)
    at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419)
    at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:50)
    at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:49)
    at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:125)
    at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:521)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:847)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:772)
    at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:256)
    at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:205)
    at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:853)
    at com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:46)
    at com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:50)
    at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:133)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
    at com.google.inject.Guice.createInjector(Guice.java:95)
    at com.google.inject.Guice.createInjector(Guice.java:72)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at org.eclipse.xtext.common.TerminalsStandaloneSetupGenerated.createInjector(TerminalsStandaloneSetupGenerated.java:40)
    at org.eclipse.xtext.common.TerminalsStandaloneSetupGenerated.createInjectorAndDoEMFRegistration(TerminalsStandaloneSetupGenerated.java:34)
    at org.eclipse.xtext.common.TerminalsStandaloneSetup.doSetup(TerminalsStandaloneSetup.java:11)
    at org.contextmapper.tactic.dsl.TacticDDDLanguageStandaloneSetupGenerated.createInjectorAndDoEMFRegistration(TacticDDDLanguageStandaloneSetupGenerated.java:21)
    at org.contextmapper.tactic.dsl.TacticDDDLanguageStandaloneSetup.doSetup(TacticDDDLanguageStandaloneSetup.java:26)
    at org.contextmapper.dsl.ContextMappingDSLStandaloneSetupGenerated.createInjectorAndDoEMFRegistration(ContextMappingDSLStandaloneSetupGenerated.java:21)
    at org.contextmapper.dsl.standalone.StandaloneContextMapper.<init>(StandaloneContextMapper.java:40)
    at org.contextmapper.dsl.standalone.ContextMapperStandaloneSetup.getStandaloneAPI(ContextMapperStandaloneSetup.java:26)
    at org.contextmapper.cli.commands.GenerateCommand.run(GenerateCommand.java:53)
    at org.contextmapper.cli.ContextMapperCLI.run(ContextMapperCLI.java:49)
    at org.contextmapper.cli.ContextMapperCLI.main(ContextMapperCLI.java:38)
Caused by: com.google.inject.internal.util.$ComputationException: java.lang.ExceptionInInitializerError
    at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553)
    at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419)
    at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
    at com.google.inject.internal.FailableCache.get(FailableCache.java:50)
    at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:49)
    at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:125)
    at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:521)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:847)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:772)
    at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:256)
    at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:205)
    at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:853)
    at com.google.inject.internal.InjectorImpl.createParameterInjector(InjectorImpl.java:925)
    at com.google.inject.internal.InjectorImpl.getParametersInjectors(InjectorImpl.java:913)
    at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:69)
    at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:28)
    at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:36)
    at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:32)
    at com.google.inject.internal.FailableCache$1.apply(FailableCache.java:39)
    at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549)
    ... 29 more
Caused by: java.lang.ExceptionInInitializerError
    at com.google.inject.internal.cglib.reflect.$FastClassEmitter.<init>(FastClassEmitter.java:67)
    at com.google.inject.internal.cglib.reflect.$FastClass$Generator.generateClass(FastClass.java:72)
    at com.google.inject.internal.cglib.core.$DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at com.google.inject.internal.cglib.core.$AbstractClassGenerator.create(AbstractClassGenerator.java:216)
    at com.google.inject.internal.cglib.reflect.$FastClass$Generator.create(FastClass.java:64)
    at com.google.inject.internal.BytecodeGen.newFastClass(BytecodeGen.java:207)
    at com.google.inject.internal.DefaultConstructionProxyFactory.create(DefaultConstructionProxyFactory.java:53)
    at com.google.inject.internal.ProxyFactory.create(ProxyFactory.java:153)
    at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:89)
    at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:28)
    at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:36)
    at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:32)
    at com.google.inject.internal.FailableCache$1.apply(FailableCache.java:39)
    at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549)
    ... 48 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @405e4200
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    at com.google.inject.internal.cglib.core.$ReflectUtils$2.run(ReflectUtils.java:56)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at com.google.inject.internal.cglib.core.$ReflectUtils.<clinit>(ReflectUtils.java:46)
    ... 62 more

I verified that the same generate command works fine on Java 11.

sacharya1980 commented 2 years ago

Verified that a suitable workaround is to export JAVA_OPTS, like so:

➜  export JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
stefan-ka commented 1 year ago

Hi @sacharya1980 Thanks for reporting it. Yes, the Java 17 issue was a long time open now :) Finally we released v6.7.0 which is compatible with 17 today: https://contextmapper.org/news/2022/12/02/v6.7.0-released/ Best regards, Stefan