java.lang.nosuchmethoderror:org.eclipse.jdt.internal.compiler.compilationresult

jchrr9hc  于 2021-06-03  发布在  Hadoop
关注(0)|答案(10)|浏览(501)

我在netbeans6.7中创建了一个web服务和一个客户端项目。web服务有一个方法,它从数据库执行一些查询并返回一个数组。在web客户端服务中调用client.jsp文件中的web服务方法会出现错误:

  1. javax.servlet.ServletException: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;
  2. org.apache.jasper.servlet.JspServlet.service(JspServlet.java:273)
  3. javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  4. org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
  5. root cause
  6. java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;
  7. org.apache.jasper.compiler.JDTCompiler$2.acceptResult(JDTCompiler.java:354)
  8. org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:398)
  9. org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:425)
  10. org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
  11. org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
  12. org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
  13. org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
  14. org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:299)
  15. org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
  16. org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
  17. javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  18. org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
  19. `

我从hadoop导入了jar。

gg58donl

gg58donl1#

尝试从tomcat库中删除ecj-x.x.x.jar来运行

erhoui1w

erhoui1w2#

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

csbfibhn

csbfibhn3#

在我的例子中,这是因为依赖jar的冲突,但是很难找出哪个jar是冲突的原因。
为了检查冲突,pom.xml中有 Dependency Hierarchy eclipse中的tab。在 Resolved Dependency 检查是否有两个同名jar。如果找到,则从父依赖项中排除其中一个。

在我的例子中是jspapijar,通过点击jspapijar,我发现父依赖是activemq core,所以我从activemq core依赖中排除了jspapijar,它工作正常。

  1. <dependency>
  2. <groupId>org.apache.activemq</groupId>
  3. <artifactId>activemq-core</artifactId>
  4. <version>5.6.0</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.mortbay.jetty</groupId>
  8. <artifactId>jsp-2.1</artifactId>
  9. </exclusion>
  10. <exclusion>
  11. <groupId>org.mortbay.jetty</groupId>
  12. <artifactId>jsp-api-2.1</artifactId>
  13. </exclusion>
  14. </exclusions>
  15. </dependency>
展开查看全部
3pvhb19x

3pvhb19x4#

我也遇到了同样的例外。在我的例子中,这是由jetty库与hadoop/hbase库冲突引起的(可能两者都包含org.eclipse.jdt.internal.compiler.compilationresult方法)。我通过在hadoop/hbase依赖项中添加以下排除项来解决此错误:

  1. <dependency>
  2. <groupId>org.apache.hadoop</groupId>
  3. <artifactId>hadoop-common</artifactId>
  4. <version>${hadoop.version2}</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>org.mortbay.jetty</groupId>
  8. <artifactId>jetty</artifactId>
  9. </exclusion>
  10. <exclusion>
  11. <groupId>org.mortbay.jetty</groupId>
  12. <artifactId>jetty-util</artifactId>
  13. </exclusion>
  14. <exclusion>
  15. <groupId>org.mortbay.jetty</groupId>
  16. <artifactId>jsp-2.1</artifactId>
  17. </exclusion>
  18. <exclusion>
  19. <groupId>org.mortbay.jetty</groupId>
  20. <artifactId>jsp-api-2.1</artifactId>
  21. </exclusion>
  22. <exclusion>
  23. <groupId>org.mortbay.jetty</groupId>
  24. <artifactId>servlet-api-2.1</artifactId>
  25. </exclusion>
  26. <exclusion>
  27. <groupId>javax.servlet</groupId>
  28. <artifactId>servlet-api</artifactId>
  29. </exclusion>
  30. <exclusion>
  31. <groupId>javax.servlet.jsp</groupId>
  32. <artifactId>jsp-api</artifactId>
  33. </exclusion>
  34. <exclusion>
  35. <groupId>tomcat</groupId>
  36. <artifactId>jasper-compiler</artifactId>
  37. </exclusion>
  38. <exclusion>
  39. <groupId>tomcat</groupId>
  40. <artifactId>jasper-runtime</artifactId>
  41. </exclusion>
  42. </exclusions>
  43. </dependency>
展开查看全部
tvz2xvvm

tvz2xvvm5#

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

  1. <exclusion>
  2. <groupId>org.mortbay.jetty</groupId>
  3. <artifactId>jetty</artifactId>
  4. </exclusion>
  5. <exclusion>
  6. <groupId>org.mortbay.jetty</groupId>
  7. <artifactId>jetty-util</artifactId>
  8. </exclusion>
  9. <exclusion>
  10. <groupId>org.mortbay.jetty</groupId>
  11. <artifactId>jsp-2.1</artifactId>
  12. </exclusion>
  13. <exclusion>
  14. <groupId>org.mortbay.jetty</groupId>
  15. <artifactId>jsp-api-2.1</artifactId>
  16. </exclusion>
  17. <exclusion>
  18. <groupId>org.mortbay.jetty</groupId>
  19. <artifactId>servlet-api-2.1</artifactId>
  20. </exclusion>
  21. <exclusion>
  22. <groupId>tomcat</groupId>
  23. <artifactId>jasper-compiler</artifactId>
  24. </exclusion>
  25. <exclusion>
  26. <groupId>tomcat</groupId>
  27. <artifactId>jasper-runtime</artifactId>
  28. </exclusion>

这解决了我的问题

展开查看全部
stszievb

stszievb6#

有多个版本的库包含 org.eclipse.jdt.internal.compiler.CompilationResult 并对它们进行排序,以便 CompilationResult.getProblems() 不存在(或被不兼容地更改)首先出现在类路径上,可能是因为它是由运行在其中的任何容器提供的。
可能的解决方案:
重新排序类路径以避免问题
如果是maven项目,则将重复的jar作为依赖项排除(在netbeans中,展开libraries节点,右键单击库并从弹出菜单中选择exclude dependency)

fdbelqdn

fdbelqdn7#

我开始在hadoop上工作,想从app集成到hadoop中。所以添加了hadoopmaven依赖项和app抛出的所有这些错误。一旦我删除了hadoop依赖,错误就消失了。

eeq64g8w

eeq64g8w8#

我对来自hadoop的jar也有同样的问题,这些jar反过来又依赖于一些jetty包。我通过在违规依赖项中放置以下排除项来解决此问题:

  1. <exclusions>
  2. <exclusion>
  3. <groupId>org.mortbay.jetty</groupId>
  4. <artifactId>servlet-api</artifactId>
  5. </exclusion>
  6. <exclusion>
  7. <groupId>org.mortbay.jetty</groupId>
  8. <artifactId>servlet-api-2.5</artifactId>
  9. </exclusion>
  10. <exclusion>
  11. <groupId>org.mortbay.jetty</groupId>
  12. <artifactId>jsp-2.1</artifactId>
  13. </exclusion>
  14. <exclusion>
  15. <groupId>org.mortbay.jetty</groupId>
  16. <artifactId>jsp-api-2.1</artifactId>
  17. </exclusion>
  18. </exclusions>
展开查看全部
7xllpg7q

7xllpg7q9#

我也有类似的问题,所有这些答案都不能解决我的问题。我在spark中使用drools,并用java实现了我的代码。我在集群上也遇到了同样的错误(在eclipse的本地系统上运行良好),导致这个问题的原因是ecj-x.x.x.jar文件。在集群上出现了jar文件的其他版本,这给drool文件(.drl文件)造成了编译问题。因此,在驱动程序类路径中,我从外部添加了当前版本的ecjjar文件,它对我起了作用。
我在spark submit中使用的命令:

  1. spark2-submit --driver-class-path ecj-4.4.2.jar --class Yourclass Yourbundeledjarfile.jar
ibps3vxo

ibps3vxo10#

嗨,这是因为jsp页面编译器,在我的例子中,jsp页面是在旧版本的tomcat中开发的,然后我部署到新版本的tomcat中,然后得到java.lang.nosuchmethoderror:org.eclipse.jdt.internal.compiler.compileationResult.getproblems()[lorg/eclipse/jdt/core/compiler/iproblem;然后我将“jasper-.”和“ecj.,el-.*”jar添加到构建路径中。我成功了。

相关问题