7

我在 netbeans 6.7 中创建了一个 Web 服务,并为客户端创建了一个项目。Web 服务有一个方法可以从数据库中进行一些查询并返回一个数组。在 Web 客户端服务中调用 client.jsp 文件中的 Web 服务方法会出现错误:

javax.servlet.ServletException: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:273)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

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:398)
    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:299)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
`

我已经从 hadoop 导入了 jars。

4

11 回答 11

6

我和你遇到了同样的例外。在我的情况下,它是由码头库与 Hadoop/HBase 库冲突引起的(可能都包含 org.eclipse.jdt.internal.compiler.CompilationResult 方法)。我通过在 Hadoop/HBase 依赖项中添加以下排除项来解决此错误:

      <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hadoop.version2}</version>
      <exclusions>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-util</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jsp-2.1</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jsp-api-2.1</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>servlet-api-2.1</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>tomcat</groupId>
            <artifactId>jasper-compiler</artifactId>
        </exclusion>
        <exclusion>
            <groupId>tomcat</groupId>
            <artifactId>jasper-runtime</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
于 2014-06-13T02:50:53.347 回答
4

尝试通过从你的 tomcat 库中删除 ecj-xxxjar 来运行

于 2013-10-03T17:21:10.777 回答
3

您的类路径中包含多个版本的库org.eclipse.jdt.internal.compiler.CompilationResult,并且它们是有序的,以便方法CompilationResult.getProblems()不存在(或不兼容地更改)的版本首先出现在类路径中,可能是因为它是由您提供的任何容器提供运行。

可能的解决方案:

  • 重新排序类路径以避免问题
  • 如果是 Maven 项目,将重复的 JAR 作为依赖项排除(在 NetBeans 中,展开节点并右键单击库并从弹出菜单中选择排除依赖项)
于 2013-07-11T23:38:25.990 回答
2

我对来自 hadoop 的 jars 也有同样的问题,而这些 jars 又依赖于一些码头包。我通过在有问题的依赖项中放置以下排除项来解决它:

<exclusions>
  <exclusion>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>servlet-api</artifactId>
  </exclusion>
  <exclusion>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>servlet-api-2.5</artifactId>
  </exclusion>
  <exclusion>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jsp-2.1</artifactId>
  </exclusion>
  <exclusion>
    <groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1</artifactId>
  </exclusion>
</exclusions>
于 2014-04-22T19:01:07.393 回答
1

我从 pom.xml 文件中的“org.apache.hbase”中排除了以下依赖项

<exclusion>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty</artifactId>
</exclusion>
<exclusion>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-util</artifactId>
 </exclusion>
 <exclusion>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jsp-2.1</artifactId>
 </exclusion>
<exclusion>
     <groupId>org.mortbay.jetty</groupId>
     <artifactId>jsp-api-2.1</artifactId>
</exclusion>
<exclusion>
     <groupId>org.mortbay.jetty</groupId>
     <artifactId>servlet-api-2.1</artifactId>
</exclusion>
<exclusion>
    <groupId>tomcat</groupId>
    <artifactId>jasper-compiler</artifactId>
</exclusion>
<exclusion>
    <groupId>tomcat</groupId>
    <artifactId>jasper-runtime</artifactId>
</exclusion>

这解决了我的问题

于 2015-04-19T15:06:49.187 回答
1

我也有类似的问题,所有这些答案都没有解决我的问题。我在 spark 中使用 drools 并使用 java 实现了我的代码。我在集群上遇到了同样的错误(在 eclipse 的本地系统上它工作正常),这个问题的原因是 ecj-xxxjar 文件。在集群上,存在一些其他版本的 jar 文件,这导致了 drool 文件(.drl 文件)的编译问题。因此,在驱动程序类路径中,我从外部添加了当前版本的 ecj jar 文件,它对我有用。

我在 spark-submit 期间使用的命令:

spark2-submit --driver-class-path ecj-4.4.2.jar --class Yourclass Yourbundeledjarfile.jar
于 2018-10-08T12:42:06.923 回答
1

在我的情况下,这是因为依赖 jar 的冲突,但很难找出哪个 jar 是冲突的原因。

所以要检查冲突,在pom.xml中有Dependency Hierarchyeclipse 中的选项卡。在Resolved Dependency部分检查是否有两个同名的罐子。如果找到,则从父依赖项中排除其中之一。

在此处输入图像描述

在我的情况下,它是 jsp-api jar,通过单击 jsp-api jar,我发现父依赖项是activemq-core,所以我从 activemq-core 依赖项中排除了 jsp-api jar,并且它工作正常。

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-core</artifactId>
    <version>5.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jsp-2.1</artifactId>
         </exclusion>
        <exclusion>
             <groupId>org.mortbay.jetty</groupId>
             <artifactId>jsp-api-2.1</artifactId>
        </exclusion>
    </exclusions>
</dependency>
于 2017-09-09T21:24:04.520 回答
0

我开始研究 hadoop,并希望从应用程序中集成到 hadoop 中。所以添加了 hadoop maven 依赖项以及应用程序抛出的所有这些错误。一旦我删除了我的 hadoop 依赖项,错误就消失了。

于 2015-02-15T15:03:20.900 回答
0

我通过使用正确的 Servlet API 版本解决了这个问题:Tomcat 7.x 需要版本 3.0.x,而不是我尝试使用的 3.1.x。另请参阅'在服务器启动时违规类告诉我什么?'

于 2015-07-10T14:15:48.167 回答
0

嗨,这是因为 jsp 页面编译器,在我的情况下,jsp 页面是在旧版本的 tomcat 中开发的,然后我部署到新版本的 tomcat 中,然后我得到 java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult .getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;然后我添加了'jasper- '和'ecj。,el- .*'jars 到构建路径。我成功了。

于 2016-02-02T12:33:27.007 回答
0

在我的情况下,我有“jdtcore”依赖被一件事(jasperreports)拉入,而ecj依赖被另一件事(drools)拉入。正如蒂姆的回答所提到的,冲突!

修复是找出哪两个依赖项将其拉入,然后更新 jasperreports,因此它不再具有 jdtcore 依赖项,或者从 pom 文件中的 jasperreports 依赖项中排除 jdtcore 依赖项。这是排除:

<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <version>4.5.1</version>
  <artifactId>jasperreports</artifactId>
  <exclusions>
    <exclusion>
     <!-- conflict with newer drools knowledge-api's ecj  -->
      <groupId>eclipse</groupId>
      <artifactId>jdtcore</artifactId>
    </exclusion>
  </exclusions>
</dependency>

似乎修复:

尝试使用我们新的 drools'ish jar 修复 sdb 在启动时死机:

Caused by: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/CategorizedProblem;
        at org.drools.commons.jci.compilers.EclipseJavaCompiler$3.acceptResult(EclipseJavaCompiler.java:328)
        at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:411)
于 2021-04-23T14:14:09.390 回答