在升级到Tomcat 8后,运行时出现了NoClassDefFoundError: JavacProcessingEnvironment错误。

7
将以下文本翻译成中文:

将项目升级到spring boot 1.5.9(spring 4.3和tomcat 8.5.24)后,使用queryDSL的服务在运行时失败,因为它找不到来自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)

当我将tools.jar作为Gradle依赖项添加时,它可以工作,但这并不是一个解决方案,因为JDK库不应该打包在项目中。
compile files(org.gradle.internal.jvm.Jvm.current().toolsJar)

我们使用的是旧版本的queryDSL(2.7.3),并且已将生成的代码提交到仓库中(这是一个旧项目,我宁愿在编译时生成)。
更新:降级回Tomcat v7.0.*后,它开始正常工作了。
有任何关于Tomcat 8的变化的想法吗?似乎它没有加载JDK库。
1个回答

1

确保Tomcat 8在jdk上运行而不是jre上运行,因为tools.jar只是jdk的一部分。在安装Tomcat时通常会选择jre。我记得早期的Tomcat需要使用jdk进行jsp编译,然后他们添加了自己的编译器,以便Tomcat可以在jre上运行。


这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言。-【来自审查】 - Philipp Kief
重新表达,但确信那是一个答案而不是批评。 - PowerStat
对于其他可能会遇到这个问题的人来说,tools.jar 是关键。 - mindreader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接