当前位置: 首页 > 知识库问答 >
问题:

NoClassDefFoundError: Tomcat 8升级后运行时的JavacProcessing环境

刘丰羽
2023-03-14

将项目升级到spring boot 1.5.9(spring 4.3)之后

/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)

当我添加工具时,它就起作用了。jar是一个gradle依赖项,但这不是一个解决方案,因为jdk库不应该打包在项目中。

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

我们使用的是queryDSL(2.7.3)的旧版本,该项目将生成的代码提交给repo(这是一个旧项目,我宁愿在编译时生成)。

更新:降级到tomcat后返回v7。0.*它再次开始工作。

知道tomcat 8中发生了什么变化吗?它似乎没有加载jdk libs。

共有1个答案

严天逸
2023-03-14

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

 类似资料:
  • 问题内容: 我尝试一起设置junit,mokito和powermock,但是当我运行测试时,我得到ClassNotFoundException :( 我还尝试通过添加以下内容来添加cglib: 但不乏。 任何人都可以共享工作配置或指出问题所在。 我运行测试时的堆栈跟踪: 问题答案: 那对我有用: 使用Mockito2为我解决了这个问题。

  • 在阅读了一些关于如何将xampp升级到新版本的php的问题后。我开始升级我的版本7因为我想学习 严格类型提示 我从官方网站下载了PHP7。我将这个下载文件夹的内容复制到xampp的php文件夹中。但它不起作用。我重新命名了php。ini开发到php。伊尼。有没有更好的方法来做到这一点,因为它不起作用。 请帮忙。

  • 我已经升级了build.sbt以使用最新的play-slick(2.0.0),但在下载并将应用程序设置为运行后,我遇到了这个异常。 `java.lang.nosuchmethoderror:play.api.logger$.init(ljava/io/file;lscala/enumeration$value;)V at play.core.server.devserverstart$$anonf

  • /D:/flutter/. pub-ache/pub.dartlang.org/path_provider_windows-0.0.43/lib/src/path_provider_windows_real.dart:126: 25:错误:getter'addressOf'没有为类'GUID'定义。 “GUID”来自“包:win32/src/结构”(“/D:/颤动/缓存/托管/发布/达特朗.org

  • 我重新安装了最新版本的Android Studio,之后我无法运行任何应用程序。 以下是我发现的: 我正在使用: Android Studio 3.1 JDK ver。1.8.0_161 Gradle Ver。4.4 Android插件版本3.1.0 也是Android.enableaapt2=false 我所尝试的: 运行以前的应用程序 创建新项目并运行它 清理/重建

  • AST或字节码的解释过程只是在代码过程层面,不足以成为一个完整的运行,因为程序计算是需要数据和存储空间的,光有代码跑不起来,需要运行时环境,至少要有数据,实际情况中还需要一些其他信息。为讨论方便,在解释器中将运行时环境抽象为前述的env对象,通过一些接口来实现存取,这里先只讨论单执行序列,不考虑并发 env在前面的分析中总共就涉及了三个接口,get,set和set_exception(当然还应该有