【问题标题】:Drools Upgrade from 5.4 to 6.2 not working in eclipseDrools 从 5.4 升级到 6.2 在 Eclipse 中不起作用
【发布时间】:2016-06-07 06:56:24
【问题描述】:

我们使用的是 eclipse Kepler Service Release 2,Tomcat 7.0.64,JDk1.7。我们以前使用 drools 5.4.0,现在我们升级了 drools 6.2.0。作为升级的一部分,我们在构建路径和 Web 应用程序 lib 文件夹中添加了以下文件。

1.drools-compiler-6.2.0.Final-redhat-4.jar
2.drools-core-6.2.0.Final-redhat-4.jar
3.ecj-4.3.1.jar
4.drools-templates-6.2.0.Final-redhat-4.jar
5.kie-api-6.2.0.Final-redhat-4.jar
6.kie-internal-6.2.0.Final-redhat-4.jar
7.knowledge-api-6.2.0.Final-redhat-4.jar
8.mvel2-2.2.4.Final-redhat-1.jar
9.protobuf-java-2.5.0.jar
10.slf4j-api-1.6.4.jar
11.slf4j-simple-1.6.4.jar
12.xstream-1.4.7.jar
13.xmlpull-1.1.3.1.jar
14.antlr-runtime-3.5.jar

我的 tomcat 和 websplication 在以前版本的 drools 上运行良好。但是一旦我介绍了上述文件,问题就开始出现了。从下面的错误中,我了解到一些 jar 文件正在发生冲突,但我不知道哪个文件正在发生冲突以及如何找出它。

每当我启动我的 tomcat 网络服务器时,我都会收到以下异常。

java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem; 在 org.apache.jasper.compiler.JDTCompiler$2.acceptResult(JDTCompiler.java:354) 在 org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:480) 在 org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:425) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:298) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:277) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:265) 在 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 2016 年 6 月 7 日上午 11:56:57 org.apache.catalina.core.StandardWrapperValve 调用严重: Servlet.service() 用于 servlet [jsp] 上下文中的路径 [] 抛出 异常 [java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;] 根本原因是 java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem; 在 org.apache.jasper.compiler.JDTCompiler$2.acceptResult(JDTCompiler.java:354) 在 org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:480) 在 org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:425) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:298) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:277) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:265) 在 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:302) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)

有人可以帮我解决上述问题吗?

注意:我们的项目设置中没有使用 Maven。

【问题讨论】:

    标签: eclipse jakarta-ee tomcat7 java-7 drools


    【解决方案1】:

    如果您不使用 maven,那么获取所有必要的依赖项可能会变得非常复杂。

    我的建议是使用您需要的依赖项(kie-api、drools-compiler、drools-core、drools-templates)创建一个非常简单的 maven 项目,然后执行以下操作:

    mvn dependency:copy-dependencies
    

    上面的命令将在target 下创建一个名为dependencies 的目录,您将在其中找到您正在使用的 Drools 工件所需的所有 .jar 文件。

    希望对你有帮助,

    【讨论】:

    • 感谢 Esteban 的回复。我发现 ecj-4.3.1.jar 是导致问题的原因,因为如果我从 WEB-INF/lib 文件夹中删除了 jar,那么它就能够加载 jsp 页面。但在这种情况下,由于缺少 jar 文件,它无法在运行时加载我的 KnowledgeBaseRepository。但我仍然会按照你的方法来确定确切的依赖集。
    • Esteban 昨天我按照你的方法检查了所有 .我在问题中列出的所有jar文件也是maven列出的依赖项。
    • 您确定您的类路径中没有多个ecj 版本吗?根据您的堆栈跟踪,问题是由 jasper 尝试使用的 ecj 版本引起的,这不是它所期望的。
    • Esteban 感谢您的回复。我可以在两个 jar 文件中看到类 org.eclipse.jdt.internal.compiler.CompilationResult 一个在 jar 文件 ecj-4.3.1.jar 中,jasper-编译器-jdt.jar。这是导致问题的原因吗,如果是,那么如何解决问题?
    • Esteban,关于多个 ecj 版本,您是对的。我还检查了它包含 ecj-4.2.2.jar 的 tomcat lib 文件夹。之后我从 WEB-INF/lib 文件夹中删除了 ecj-4.3.1.jar 和 jasper-compiler-jdt.jar。但问题还是一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多