这是indexloc提供的服务,不要输入任何密码
Skip to content

LinkageError with Lombok, Eclipse and JasperReports Maven Plugin #1036

@mkielar

Description

@mkielar

I'm getting a LinkageError error when opening a Maven project that utilizes jasperreports-plugin in Eclipse Mars with Lombok.

Version: Mars.1 Release (4.5.1)
Build id: 20150924-1200
Lombok v1.16.6 "Candid Duck" is installed.

In that case, whenever project is built, it runs the Maven Plugin, the Plugin seems to run correctly (no logs in Eclipse's Maven Console) and then Eclipse reports an error in pom.xml with this exception:

Error while compiling Jasper reports (com.alexnederlof:jasperreports-plugin:1.6:jasper:default:process-sources) org.apache.maven.plugin.MojoExecutionException: Error while compiling Jasper reports
    at com.alexnederlof.jasperreport.JasperReporter.executeTasks(JasperReporter.java:238)
    at com.alexnederlof.jasperreport.JasperReporter.execute(JasperReporter.java:138)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360)
    at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
    at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115) 
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:205)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:245)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:300)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:359)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:382)
    at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
    at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) 

Caused by: java.util.concurrent.ExecutionException: java.lang.LinkageError: loader constraint violation: when resolving method "lombok.launch.PatchFixesHider$Transform.transform_swapped(Lorg/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration;Lorg/eclipse/jdt/internal/compiler/parser/Parser;)V" the class loader (instance of org/codehaus/plexus/classworlds/realm/ClassRealm) of the current class, org/eclipse/jdt/internal/compiler/parser/Parser, and the class loader  (instance of lombok/launch/ShadowClassLoader) for the method's defining class, lombok/launch/PatchFixesHider$Transform, have different Class objects for the type org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration used in the signature
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at com.alexnederlof.jasperreport.JasperReporter.checkForExceptions(JasperReporter.java:245)
    at com.alexnederlof.jasperreport.JasperReporter.executeTasks(JasperReporter.java:230) 
    ... 33 more 

Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "lombok.launch.PatchFixesHider$Transform.transform_swapped(Lorg/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration;Lorg/eclipse/jdt/internal/compiler/parser/Parser;)V" the class loader (instance of org/codehaus/plexus/classworlds/realm/ClassRealm) of the current class, org/eclipse/jdt/internal/compiler/parser/Parser, and the class loader (instance of lombok/launch/ShadowClassLoader) for the method's defining class, lombok/launch/PatchFixesHider$Transform, have different Class objects for the type org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration used in the signature
    at org.eclipse.jdt.internal.compiler.parser.Parser.endParse(Parser.java:8681)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9715)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9933)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9890)
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8454)
    at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:718)
    at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:383)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:428)
    at net.sf.jasperreports.engine.design.JRJdtCompiler.compileUnits(JRJdtCompiler.java:173)
    at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:212)
    at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:357)
    at net.sf.jasperreports.engine.JasperCompileManager.compileToStream(JasperCompileManager.java:326)
    at net.sf.jasperreports.engine.JasperCompileManager.compileToStream(JasperCompileManager.java:309)
    at net.sf.jasperreports.engine.JasperCompileManager.compileReportToStream(JasperCompileManager.java:587)
    at com.alexnederlof.jasperreport.CompileTask.call(CompileTask.java:75) 
    at com.alexnederlof.jasperreport.CompileTask.call(CompileTask.java:34)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

I created a small, self contained, correct example that will allow to reproduce the problem.
The problem might be that the plugin uses ejc artifact by itself, and then classes from it are loaded with a different classloader than Eclipse's, which somehow results in LinkageError.

If I remove Lombok, the whole thing complies smoothly without errors.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions