Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoClassDefFoundError: JavacProcessingEnvironment at runtime after tomcat 8 upgrade

After upgrading a project to spring boot 1.5.9 (spring 4.3 & tomcat 8.5.24) a service that makes use of queryDSL is failing at runtime because it can't find a class from a jdk lib (tools.jar).

/Q_742623943_01321512155_128635432.java:1: warning: Can't initialize javac processor due to (most likely) a class loader problem: java.lang.NoClassDefFoundError: com/sun/tools/javac/processing/JavacProcessingEnvironment
public class Q_742623943_01321512155_128635432 {
       ^
    at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:83)
    at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
    at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140)
    at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:500)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:690)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
    at com.sun.tools.javac.main.Main.compile(Main.java:523)
    at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
    at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
    at com.mysema.codegen.JDKEvaluatorFactory.compile(JDKEvaluatorFactory.java:90)
    at com.mysema.codegen.AbstractEvaluatorFactory.createEvaluator(AbstractEvaluatorFactory.java:76)
    at com.mysema.codegen.AbstractEvaluatorFactory.createEvaluator(AbstractEvaluatorFactory.java:45)
    at com.mysema.query.collections.DefaultEvaluatorFactory.create(DefaultEvaluatorFactory.java:120)
    at com.mysema.query.collections.DefaultQueryEngine.project(DefaultQueryEngine.java:218)
    at com.mysema.query.collections.DefaultQueryEngine.evaluateSingleSource(DefaultQueryEngine.java:190)
    at com.mysema.query.collections.DefaultQueryEngine.list(DefaultQueryEngine.java:82)
    at com.mysema.query.collections.AbstractColQuery.list(AbstractColQuery.java:149)

It works when i add tools.jar as a gradle dependency, but this is not a solution, because jdk libraries shouldn't be packaged in the project.

compile files(org.gradle.internal.jvm.Jvm.current().toolsJar)

We're on an old version of queryDSL (2.7.3) and the project has the generated code committed to the repo (it's an old project, I would rather generate on compile).

Update: After downgrading to tomcat back to v7.0.* it starts working again.

Any idea what changed in tomcat 8? It seems like it is not loading jdk libs.

like image 890
miklesw Avatar asked Jan 19 '18 10:01

miklesw


1 Answers

Make sure that Tomcat 8 runs on a jdk and not on a jre, thats because the tools.jar is only part of a jdk. During Tomcat installation often the jre would be choosen. I remember that earlier tomcats required a jdk for jsp compilation and then they added their own compiler for that so that tomcat could run on a jre.

like image 90
PowerStat Avatar answered Oct 22 '22 00:10

PowerStat