Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 368041

Summary: maven based build chokes on guice bytecode generation
Product: [Modeling] TMF Reporter: Stephan Herrmann <stephan.herrmann>
Component: XtextAssignee: Project Inbox <tmf.xtext-inbox>
Status: CLOSED FIXED QA Contact:
Severity: major    
Priority: P3 CC: sebastian.zarnekow
Version: 2.2.1Flags: sebastian.zarnekow: juno+
Target Milestone: M6   
Hardware: PC   
OS: Windows 7   
Whiteboard:

Description Stephan Herrmann CLA 2012-01-06 10:55:01 EST
I have a multi-project Xtext setup that needs to be built using 
maven/tycho. One particular workflow breaks the build with this
exception (shortened):

[INFO] Fornax Model Workflow Maven2 Plugin V3.3.0
[INFO] 0    ERROR Mwe2Launcher       - com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
[INFO] com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.ComputationException: com.google.inject.internal.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
[INFO] 	at com.google.inject.internal.MapMaker$StrategyImpl.compute(MapMaker.java:553)
[INFO] 	at com.google.inject.internal.MapMaker$StrategyImpl.compute(MapMaker.java:419)
[INFO] 	at com.google.inject.internal.CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
[INFO] 	at com.google.inject.internal.FailableCache.get(FailableCache.java:46)
[INFO] 	at com.google.inject.ConstructorInjectorStore.get(ConstructorInjectorStore.java:52)
[INFO] 	at com.google.inject.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:57)
[INFO] 	at com.google.inject.InjectorImpl.initializeBinding(InjectorImpl.java:377)
[INFO] 	at com.google.inject.BindingProcessor$1$1.run(BindingProcessor.java:169)
[INFO] 	at com.google.inject.BindingProcessor.initializeBindings(BindingProcessor.java:224)
[INFO] 	at com.google.inject.InjectorBuilder.initializeStatically(InjectorBuilder.java:120)
[INFO] 	at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:105)
[INFO] 	at com.google.inject.Guice.createInjector(Guice.java:92)
[INFO] 	at com.google.inject.Guice.createInjector(Guice.java:69)
[INFO] 	at com.google.inject.Guice.createInjector(Guice.java:59)
[INFO] 	at org.eclipse.emf.mwe2.language.Mwe2StandaloneSetupGenerated.createInjector(Mwe2StandaloneSetupGenerated.java:34)
[INFO] 	at org.eclipse.emf.mwe2.language.Mwe2StandaloneSetupGenerated.createInjectorAndDoEMFRegistration(Mwe2StandaloneSetupGenerated.java:28)
[INFO] 	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:71)
[INFO] 	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
...
[INFO] Caused by: java.lang.SecurityException: class "org.eclipse.xtext.common.types.access.impl.ClassURIHelper$$FastClassByGuice$$f33d57c4"'s signer information does not match signer information of other classes in the same package
[INFO] 	at java.lang.ClassLoader.checkCerts(Unknown Source)
[INFO] 	at java.lang.ClassLoader.preDefineClass(Unknown Source)
[INFO] 	at java.lang.ClassLoader.defineClassCond(Unknown Source)
[INFO] 	at java.lang.ClassLoader.defineClass(Unknown Source)
[INFO] 	... 150 more

I could narrow it down to the following:

* IT WORKS, when the workflow resides in one of the grammar projects.
* IT BREAKS, when the workflow resides in a separate generator project.

Both projects are modules of a common parent project.

Eventually, I will of course need to invoke the workflow from individual
client modules using the DSL.

From a forum post I learned that the exception is likely due to bad
interaction between Guice's bytecode generator and Java security, and
it was suggested to disable this Guice feature. However, since I'm not
a Guice expert (and my only contact to Guice is indirectly via Xtext)
I have no idea how to configure Guice in this way.
Ideally I'd expect Xtext to encapsulate such low-level configuration :)
Comment 1 Sebastian Zarnekow CLA 2012-03-07 11:10:04 EST
Since we use Guice without byte code generation now, I mark this one as resolved for 2.3.
Comment 2 Karsten Thoms CLA 2017-09-19 17:19:21 EDT
Closing all bugs that were set to RESOLVED before Neon.0
Comment 3 Karsten Thoms CLA 2017-09-19 17:30:52 EDT
Closing all bugs that were set to RESOLVED before Neon.0