java--遇到NoSuchMethodError通用解决思路1、问题:在新增hadoop2.6.0后启动tomcat报错:java.lan g.NoSuchMethodError:org.eclipse.jdt.internal.compiler.Compilatio nResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;or g.apache.jasper.compiler.JDTCompiler$2.acceptResult(JDTCompiler.j ava:354)org.eclipse.jdt.internal.compiler.Compiler.compile(Compi ler.java:480)解决方案:在pom.xml里的hadoop里分别加上如下其依赖,启动OK。org.apache.hadoopifactId>hadoop-client2.6.0endency>org.apache.hadoopactId>hadoop-common2.6.0ions>servlet-apid>javax.servlet>jasper-compilertomcatsion>jasper-runtimeupId>tomcatjsp -apijavax.servlet.jspion>org.apach e.hadoophadoop-hdfs 2.6.0servlet-ap ijavax.servlet< /exclusions>2、关于hadoop与jstl冲突问题java.lang.AbstractMe thodError:javax.servlet.jsp.PageContext.getELContext()Ljavax/e在做 web后台的时候有用到hive,当然,肯定也得需要hadoop的jar包,但是加入hadoopjar包的时候遇到个问题,很让我头疼 ,那就是任何网页都打不开了,浏览任何页面一打开就报错:解决方案:在pom.xml里的hadoop里分别加上如下其依赖,访问所有页面 都OK。org.apache.ha doophadoop-client2. 6.0servlet-apirtifactId>javax.servleton>jettyorg.mortbay.jettyoupId>jetty-utild>org.mortbay.jetty jersey-corecom.sun.jerseyupId>jersey-jsond>com.sun.jerseytifactId>jersey-servercom.sun.jerseypId>Id>org.apache.hadoophadoop-commontId>2.6.0d>jsp-2.1org.mortbay.jettylusion>jsp-apiorg .mortbay.jettyjet tyorg.mortbay.jetty jetty-utilorg.mor tbay.jettyjasper- runtimetomcatusion>jasper-compilertomcat groupId>commons-clictId>commons-clitifactId>jersey-corecom.sun.jerseyd>jersey-json com.sun.jerseyactId>jersey-servercom.sun.jersey> org.apache.hadoophadoop-hdfs 2.6.0ser vlet-apijavax.servletn>jettyorg.mortba y.jettyjetty-util org.mortbay.jetty< exclusion>jersey-corecom.sun. jerseyjersey-json com.sun.jerseylusion>jersey-servercom.sun.j erseyjasper-runti metomcat>jsp-api-2.1org.mortbay.jetty 最近接手新项目,项目一跑,N oSuchMethodError蹦出来了,好不容易解决了,换一个电脑,NoSuchMethodError又蹦出来了,干脆,总结下遇 到NoSuchMethodError应该如何应对的思路。通过下面的通用思路,可以在不必了解业务的情况下,尽可能解决这个报错。下 面演示下如何在啥都不知道的情况下遇到该错误的解决思路:随便找一个错误示例:Causedby:java.lang.NoSuch MethodError:org.eclipse.jdt.internal.compiler.Compiler.(Lo rg/eclipse/jdt/internal/compiler/env/INameEnvironment;Lorg/eclips e/jdt/internal/compiler/IErrorHandlingPolicy;Lorg/eclipse/jdt/int ernal/compiler/impl/CompilerOptions;Lorg/eclipse/jdt/internal/com piler/ICompilerRequestor;Lorg/eclipse/jdt/internal/compiler/IProb lemFactory;)Vatcom.taobao.sketch.compile.Compiler.generateClass (Compiler.java:392)atcom.taobao.sketch.compile.Compiler.compile (Compiler.java:38)atcom.taobao.sketch.compile.SketchCompilation Context.globalVmCompile(SketchCompilationContext.java:403)atcom .taobao.sketch.runtime.SketchRuntimeServer.getGlobalVmTemplate(Sk etchRuntimeServer.java:622)atcom.taobao.sketch.runtime.SketchRu ntimeServer.resolveGloabalVm(SketchRuntimeServer.java:136)atcom .taobao.sketch.runtime.SketchRuntimeServer.initializeVmLibrary(Sk etchRuntimeServer.java:127)atcom.taobao.sketch.runtime.SketchRu ntimeServer.init(SketchRuntimeServer.java:96)atcom.taobao.sketc h.SketchEngine.init(SketchEngine.java:66)atcom.taobao.sketch.se rvice.impl.SketchEngineImpl.init(SketchEngineImpl.java:118)atco m.alibaba.citrus.springext.support.BeanSupport.afterPropertiesSet (BeanSupport.java:80)atorg.springframework.beans.factory.suppor t.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAu towireCapableBeanFactory.java:1369)atorg.springframework.beans. factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1335)...39more这是一个we bx框架下的javaweb项目,在启动jetty服务器时报的错。一开始看时看到报错,内心是奔溃的,刚接手项目,以前代码又不是我写的 ,我怎么知道会报找不到方法的是什么原因引起的啊。别急,先看引起这个错误有可能的原因是什么。错误可能的原因:有这个类,该类真的没有 这个方法有这个类,而且有好几个,他们之间发生了冲突原因排除:1、点击进入报错的代码所在行,在报错的地方打一个debug点,重行 启动项目或重现该错误,让程序运行到该行代码:2、打开display界面(若没有,请在window--showview里面 找出该界面),手动敲出xxx.class.getProtectionDomain().getCodeSource(),xxx为报 错的类的全类名,鼠标选中该行代码,点击界面右上角的J图标,即会打印出到该类对应的包所在的地址。如下图所示。可以看到,结果为: (java.security.CodeSource)(file:/D:/Program%20Files%20(x86)/ecl ipse/configuration/org.eclipse.osgi/843/0/.cp/lib/core-3.1.1.jar )3、接着复制该类的全类名,快捷键Ctrl+Shift+T打开opentype 界面,查看我们的项目引用到的包中,哪些有这个类:我们发现有两个包中有org.eclipse.jdt.internal.comp iler.Compiler这个类,分别为:包一:ecj.3.5.1.jar包二:core-3.1.1.jar地址分别为: 但我们发现,刚刚在display中,我们看到的地址,居然不是来自这上面两个地址(上面两个包的地址都在C盘,DEBUG中的包来自D盘 ),也就是说,实现运行环境引入的包,并不是在我们自己项目中配置的,因为opentypy只能找到自己项目中配的东西。那么D盘的这 个包,在什么地方引入的呢?想想,这个错误是在项目启动时报的,那么除了项目,还有“服务器”可能会引入其他包,那么有没有可能是服务器 帮我们引入呢?4、打开服务器的Classpath,可以找到服务器确实引入了这个包那么我们在服务器的classpath中把这个 包“remove”掉。5、再次重新启动项目,dubug、卡点、display,这次结果如下:发现:实际环境中,现在己经没有引入 D盘那个core-3.1.1.jar包了。我们让项目运行下去,发现还是报同样的错——找不到方法。那么接下来我们让项目引用ecj.3 .5.1.jar这个包试试。6、ctrl+shift+T、双击进入core-3.1.1.jar中Compiler类所在的目录结构 :提示:左边栏勾上这个标志,即可展开该包所在的目录:同理,打开ecj.3.5.1.jar中Compiler类所在的目录 结构。最后发现,这个jar包都同一个项目下面,而且两个包都有Compiler类,且排在前面的是core-3.1.1.jar,但是 core-3.1.1.jar的Compiler类并没有我们想要的方法,所以报错了。但是eclipse在找类的时候,只要按顺序找到一 个,就不会往下找了,所以排在下面的ecj-3.5.1.jar并不会被找到,即使里面有Compiler这个类,且有我们想要的方法。 7、排除core-3.1.1.jar包:该项目是maven项目。我们尝试直接在该项目的pom.xml中搜索core这个包是搜索不 到的,那么这个core-3.1.1包可能是因为本项目引入其他项目,而其他项目引入core-3.1.1.jar,所以本项目间接把该包 引过来了。同时,因为该项目是maven项目,可以通过以下该方法排除这个包:排除后,该项目的pom.xml变成:假如是非m aven项目,那么可以直接从lib中除去该包,或从项目根目录下面打开.classpath文件,找到对应的包的配置,删除该行即可。 通过该pom.xml我们可以知道,之所以会产生jar包冲突,原因有两个:1、本项目A本身引用了ecj-3.5.1.jar包,同 时引入了项目B,而项目B引入了core-3.1.1.jar,所以本项目也相当于引入了core-3.1.1.jar,这就是maven 项目中常见的jar包冲突。2、那为什么maven没有自动帮我们解决jar包冲突呢,那是因为ecj-3.5.1.jar包和cor e-3.1.1.jar包的groupId和artifactId都不一样,所以maven认为这是两个jar包,并不冲突,解决的办法就 是像上面那样,加入exclusions排除。所以我们在开发一个组件的时候,起名字是一个很重要的问题,如果升级组件连名字也改了,用户 会产生很大的不方便。再次启动项目,问题解决。http://brandnewuser.iteye.com/blog/2208969 web项目中遇到的Maven包依赖冲突问题解决在搭建web项目时,出现一个比较诡异的问题,任何JSP页面突然都不能够正常地显示,系 统爆出HTTP:500(服务器内部错误)的页面HTTPStatus500-java.lang.NoSuchMethodEr ror:org.eclipse.jdt.internal.compiler.CompilationResult.getProbl ems()[Lorg/eclipse/jdt/core/compiler/IProblem;typeExceptionrepo rtmessagejava.lang.NoSuchMethodError:org.eclipse.jdt.internal.c ompiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/com piler/IProblem;descriptionTheserverencounteredaninternalerr orthatpreventeditfromfulfillingthisrequest.exceptionjavax. servlet.ServletException:java.lang.NoSuchMethodError:org.eclips e.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/ecli pse/jdt/core/compiler/IProblem;org.apache.jasper.servlet.JspServ let.service(JspServlet.java:273)javax.servlet.http.HttpServlet.s ervice(HttpServlet.java:727)org.apache.tomcat.websocket.server.W sFilter.doFilter(WsFilter.java:52)org.springframework.web.servle t.view.InternalResourceView.renderMergedOutputModel(InternalResou rceView.java:238)org.springframework.web.servlet.view.AbstractVi ew.render(AbstractView.java:264)org.springframework.web.servlet. DispatcherServlet.render(DispatcherServlet.java:1208)org.springf ramework.web.servlet.DispatcherServlet.processDispatchResult(Disp atcherServlet.java:992)org.springframework.web.servlet.Dispatche rServlet.doDispatch(DispatcherServlet.java:939)org.springframewo rk.web.servlet.DispatcherServlet.doService(DispatcherServlet.java :856)org.springframework.web.servlet.FrameworkServlet.processReq uest(FrameworkServlet.java:936)org.springframework.web.servlet.F rameworkServlet.doGet(FrameworkServlet.java:827)javax.servlet.ht tp.HttpServlet.service(HttpServlet.java:620)org.springframework. web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)j avax.servlet.http.HttpServlet.service(HttpServlet.java:727)org.s pringframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:77)org.springframework.web.filter.O ncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)org.a pache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) rootcauseJava代码Java代码java.lang.NoSuchMethodError:org.eclipse. jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclips e/jdt/core/compiler/IProblem;org.apache.jasper.compiler.JDTCompi ler$2.acceptResult(JDTCompiler.java:354)org.eclipse.jdt.internal .compiler.Compiler.compile(Compiler.java:480)org.apache.jasper.c ompiler.JDTCompiler.generateClass(JDTCompiler.java:425)org.apach e.jasper.compiler.Compiler.compile(Compiler.java:298)org.apache. jasper.compiler.Compiler.compile(Compiler.java:277)org.apache.ja sper.compiler.Compiler.compile(Compiler.java:265)org.apache.jasp er.JspCompilationContext.compile(JspCompilationContext.java:564) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWra pper.java:299)org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:315)org.apache.jasper.servlet.JspServlet.servi ce(JspServlet.java:265)javax.servlet.http.HttpServlet.service(Ht tpServlet.java:727)org.apache.tomcat.websocket.server.WsFilter.d oFilter(WsFilter.java:52)org.springframework.web.servlet.view.In ternalResourceView.renderMergedOutputModel(InternalResourceView.j ava:238)org.springframework.web.servlet.view.AbstractView.render (AbstractView.java:264)org.springframework.web.servlet.Dispatche rServlet.render(DispatcherServlet.java:1208)org.springframework. web.servlet.DispatcherServlet.processDispatchResult(DispatcherSer vlet.java:992)org.springframework.web.servlet.DispatcherServlet. doDispatch(DispatcherServlet.java:939)org.springframework.web.se rvlet.DispatcherServlet.doService(DispatcherServlet.java:856)org .springframework.web.servlet.FrameworkServlet.processRequest(Fram eworkServlet.java:936)org.springframework.web.servlet.FrameworkS ervlet.doGet(FrameworkServlet.java:827)javax.servlet.http.HttpSe rvlet.service(HttpServlet.java:620)org.springframework.web.servl et.FrameworkServlet.service(FrameworkServlet.java:812)javax.serv let.http.HttpServlet.service(HttpServlet.java:727)org.springfram ework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHt tpMethodFilter.java:77)org.springframework.web.filter.OncePerReq uestFilter.doFilter(OncePerRequestFilter.java:107)org.apache.tom cat.websocket.server.WsFilter.doFilter(WsFilter.java:52)经过初步查看堆栈 ,大意是将JSP编译成Servlet产生了错误,类不匹配,怀疑可能是JSTL,Servlet和Tomcat版本产生了冲突。一番折腾 ,没有进展。于是思考了一下,刚才只不过是添加了hadoophdfs相关的jar包:Xml代码upId>org.apache.hadoophadoop-commonactId>2.2.0Id>org.apache.hadoophadoop-hdfsd>2.2.0o rg.apache.hadoophadoop-auth< version>2.2.0难道是其中包含了一些特殊的依赖?通过IntelliJ Idea中的pom编辑器,可以显示MavenShowDependencies:可以看出所有的依赖关系,果然,hadoop-co mmon包依赖了servlet-api,jasper-runtime等可能与当前环境冲突的jar包,由于这些都是通过依赖关系链产 生的关系,所以非常不容易被察觉。同样,也可以通过mvn自带的工具在项目中命令行操作得到整个依赖的树形结构:Java代码mvnd ependency:tree[INFO]com.xxx:diablo-framework:war:1.0-SNAPSHOT [INFO]+-javax.servlet:jstl:jar:1.2:compile[INFO]+-javax:java ee-api:jar:6.0:provided[INFO]+-log4j:log4j:jar:1.2.8:compile[ INFO]+-com.sun.mail:javax.mail:jar:1.5.2:compile[INFO]|\-ja vax.activation:activation:jar:1.1:compile[INFO]+-commons-io:co mmons-io:jar:2.4:compile[INFO]+-commons-beanutils:commons-bean utils:jar:1.9.2:compile[INFO]|+-commons-logging:commons-loggi ng:jar:1.1.1:compile[INFO]|\-commons-collections:commons-coll ections:jar:3.2.1:compile[INFO]+-commons-lang:commons-lang:jar :2.6:compile[INFO]+-org.codehaus.jackson:jackson-xc:jar:1.9.13 :compile[INFO]|\-org.codehaus.jackson:jackson-core-asl:jar:1. 9.13:compile[INFO]+-org.codehaus.jackson:jackson-mapper-asl:ja r:1.9.13:compile[INFO]+-commons-httpclient:commons-httpclient: jar:3.1:test[INFO]|\-commons-codec:commons-codec:jar:1.2:comp ile[INFO]+-junit:junit:jar:4.11:test[INFO]|\-org.hamcrest: hamcrest-core:jar:1.3:test[INFO]+-org.springframework:spring-c ore:jar:3.2.2.RELEASE:compile[INFO]+-org.springframework:sprin g-aop:jar:3.2.2.RELEASE:compile[INFO]|\-aopalliance:aopallian ce:jar:1.0:compile[INFO]+-org.springframework:spring-aspects:j ar:3.2.2.RELEASE:compile[INFO]|\-org.aspectj:aspectjweaver:ja r:1.7.2:compile[INFO]+-org.springframework:spring-beans:jar:3. 2.2.RELEASE:compile[INFO]+-org.springframework:spring-context: jar:3.2.2.RELEASE:compile[INFO]+-org.springframework:spring-co ntext-support:jar:3.2.2.RELEASE:compile[INFO]+-org.springframe work:spring-dao:jar:2.0.8:compile[INFO]+-org.springframework:s pring-expression:jar:3.2.2.RELEASE:compile[INFO]+-org.springfr amework:spring-jdbc:jar:3.2.2.RELEASE:compile[INFO]+-org.sprin gframework:spring-jms:jar:3.2.2.RELEASE:compile[INFO]+-org.spr ingframework:spring-orm:jar:3.2.2.RELEASE:compile[INFO]+-org.s pringframework:spring-oxm:jar:3.2.2.RELEASE:compile[INFO]+-org .springframework:spring-test:jar:3.2.2.RELEASE:compile[INFO]+- org.springframework:spring-tx:jar:3.2.2.RELEASE:compile[INFO]+- org.springframework:spring-web:jar:3.2.2.RELEASE:compile[INFO] +-org.springframework:spring-webmvc:jar:3.2.2.RELEASE:compile[I NFO]+-org.apache.commons:commons-exec:jar:1.3:compile[INFO]+- commons-dbcp:commons-dbcp:jar:1.4:compile[INFO]|\-commons-po ol:commons-pool:jar:1.5.4:compile[INFO]+-org.hibernate:hiberna te-core:jar:3.6.10.Final:compile[INFO]|+-antlr:antlr:jar:2.7. 6:compile[INFO]|+-dom4j:dom4j:jar:1.6.1:compile[INFO]|+-o rg.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compil e[INFO]|+-org.hibernate.javax.persistence:hibernate-jpa-2.0-a pi:jar:1.0.1.Final:compile[INFO]|+-javax.transaction:jta:jar: 1.1:compile[INFO]|\-org.slf4j:slf4j-api:jar:1.6.1:compile[IN FO]+-org.hibernate:hibernate-entitymanager:jar:3.6.10.Final:com pile[INFO]|+-cglib:cglib:jar:2.2:compile[INFO]||\-asm:as m:jar:3.1:compile[INFO]|\-javassist:javassist:jar:3.12.0.GA:c ompile[INFO]+-net.sf.ehcache:ehcache-core:jar:2.6.9:compile[I NFO]+-mysql:mysql-connector-java:jar:5.1.31:compile[INFO]+-o rg.hsqldb:hsqldb:jar:2.2.9:compile[INFO]+-commons-fileupload:c ommons-fileupload:jar:1.3.1:compile[INFO]+-org.apache.poi:poi: jar:3.5-FINAL:compile[INFO]+-org.apache.poi:poi-ooxml:jar:3.5- FINAL:compile[INFO]|\-org.apache.poi:ooxml-schemas:jar:1.0:co mpile[INFO]|\-org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile [INFO]|\-stax:stax-api:jar:1.0.1:compile[INFO]+-org.apache. oozie:oozie-client:jar:4.1.0:compile[INFO]|+-com.googlecode.j son-simple:json-simple:jar:1.1:compile[INFO]|+-commons-cli:co mmons-cli:jar:1.2:compile[INFO]|+-com.google.guava:guava:jar: 11.0.2:compile[INFO]||\-com.google.code.findbugs:jsr305:jar: 1.3.9:compile[INFO]|+-org.apache.activemq:activemq-client:jar :5.8.0:compile[INFO]||+-org.apache.geronimo.specs:geronimo-j ms_1.1_spec:jar:1.1.1:compile[INFO]||+-org.fusesource.hawtbu f:hawtbuf:jar:1.9:compile[INFO]||\-org.apache.geronimo.specs :geronimo-j2ee-management_1.1_spec:jar:1.0.1:compile[INFO]|+- org.slf4j:slf4j-simple:jar:1.6.6:compile[INFO]|\-xerces:xerce sImpl:jar:2.10.0:compile[INFO]|\-xml-apis:xml-apis:jar:1.4.01 :compile[INFO]+-org.freemarker:freemarker:jar:2.3.20:compile[ INFO]+-org.apache.hadoop:hadoop-common:jar:2.2.0:compile[INFO] |+-org.apache.hadoop:hadoop-annotations:jar:2.2.0:compile[INF O]|+-org.apache.commons:commons-math:jar:2.1:compile[INFO]| +-xmlenc:xmlenc:jar:0.52:compile[INFO]|+-commons-net:commons -net:jar:3.1:compile[INFO]|+-org.mortbay.jetty:jetty:jar:6.1. 26:compile[INFO]|+-org.mortbay.jetty:jetty-util:jar:6.1.26:co mpile[INFO]|+-com.sun.jersey:jersey-core:jar:1.9:compile[INF O]|+-com.sun.jersey:jersey-json:jar:1.9:compile[INFO]||+- org.codehaus.jettison:jettison:jar:1.1:compile[INFO]||+-com. sun.xml.bind:jaxb-impl:jar:2.2.3-1:compile[INFO]|||\-javax. xml.bind:jaxb-api:jar:2.2.2:compile[INFO]||\-org.codehaus.ja ckson:jackson-jaxrs:jar:1.8.3:compile[INFO]|+-com.sun.jersey: jersey-server:jar:1.9:compile[INFO]|+-commons-el:commons-el:j ar:1.0:compile[INFO]|+-net.java.dev.jets3t:jets3t:jar:0.6.1:c ompile[INFO]|+-commons-configuration:commons-configuration:ja r:1.6:compile[INFO]||+-commons-digester:commons-digester:jar :1.8:compile[INFO]||\-commons-beanutils:commons-beanutils-co re:jar:1.8.0:compile[INFO]|+-org.slf4j:slf4j-log4j12:jar:1.7. 5:compile[INFO]|+-org.apache.avro:avro:jar:1.7.4:compile[INF O]||+-com.thoughtworks.paranamer:paranamer:jar:2.3:compile[I NFO]||\-org.xerial.snappy:snappy-java:jar:1.0.4.1:compile[IN FO]|+-com.google.protobuf:protobuf-java:jar:2.5.0:compile[INF O]|+-com.jcraft:jsch:jar:0.1.42:compile[INFO]|+-org.apache .zookeeper:zookeeper:jar:3.4.5:compile[INFO]|\-org.apache.com mons:commons-compress:jar:1.4.1:compile[INFO]|\-org.tukaani:x z:jar:1.0:compile[INFO]+-org.apache.hadoop:hadoop-hdfs:jar:2.2 .0:compile[INFO]|+-commons-daemon:commons-daemon:jar:1.0.13:c ompile[INFO]|+-javax.servlet.jsp:jsp-api:jar:2.1:compile[INF O]|\-tomcat:jasper-runtime:jar:5.5.23:compile[INFO]+-org.ap ache.hadoop:hadoop-auth:jar:2.2.0:compile[INFO]+-com.xxx:diabl o.communication:jar:1.0-SNAPSHOT:compile[INFO]+-com.caucho:hes sian:jar:3.1.5:compile[INFO]\-org.quartz-scheduler:quartz:jar: 1.8.4:compile于是,通过右键将这些jar包排除(Exclude)出去,最后编辑生成的依赖成为了这样:Xml代码ependency>org.apache.hadoophadoo p-common2.2.0usion>servlet-apijavax.servle tjasper-compiler< /artifactId>tomcat< artifactId>jasper-runtimetomcat jsp-apid>javax.servlet.jspency>org.apache.hadoopId>hadoop-hdfs2.2.0 servlet-apijavax. servlet问题才得以解 决,在普通的Java应用中,当出现相同版本的jar包,class时,是根据启动时的CLASSPATH先后顺序来决定最终使用的是哪个 类型,但是这样就非常不确定。虽然OSGi技术可以通过隔离ClassLoader的方式解决这个问题,但OSGi本身稍显复杂臃肿,学习 成本比较高,而且同样需要一个OSGi容器。这就要求我们在平时引入新的jar包时能够对其进行依赖分析,找出可能产生冲突的jar包,最 终解决问题。关于hadoop与jstl冲突问题java.lang.AbstractMethodError:javax.servle t.jsp.PageContext.getELContext()Ljavax/e在做web后台的时候有用到hive,当然,肯定也 得需要hadoop的jar包,但是加入hadoopjar包的时候遇到个问题,很让我头疼,那就是任何网页都打不开了,浏览任何页面一打 开就报错:javax.servlet.ServletException:java.lang.AbstractMethodErro r:javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContex t;atorg.apache.jasper.runtime.PageContextImpl.doHandlePageExcept ion(PageContextImpl.java:846)atorg.apache.jasper.runtime.PageCon textImpl.handlePageException(PageContextImpl.java:779)atorg.apac he.jsp.WEB_002dINF.views.index_jsp._jspService(index_jsp.java:175 )atorg.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.jav a:98)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:8 20)atorg.apache.jasper.servlet.JspServletWrapper.service(JspServ letWrapper.java:328)atorg.apache.jasper.servlet.JspServlet.servi ceJspFile(JspServlet.java:315)atorg.apache.jasper.servlet.JspSer vlet.service(JspServlet.java:265)atjavax.servlet.http.HttpServle t.service(HttpServlet.java:820)atorg.mortbay.jetty.servlet.Servl etHolder.handle(ServletHolder.java:487)atorg.mortbay.jetty.servl et.ServletHandler.handle(ServletHandler.java:362)atorg.mortbay.j etty.security.SecurityHandler.handle(SecurityHandler.java:216)at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.ja va:181)atorg.mortbay.jetty.handler.ContextHandler.handle(Context Handler.java:726)atorg.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:405)atorg.mortbay.jetty.servlet.Dispatcher.f orward(Dispatcher.java:285)atorg.mortbay.jetty.servlet.Dispatche r.forward(Dispatcher.java:126)atorg.springframework.web.servlet. view.InternalResourceView.renderMergedOutputModel(InternalResourc eView.java:168)atorg.springframework.web.servlet.view.AbstractVi ew.render(AbstractView.java:303)atorg.springframework.web.servle t.DispatcherServlet.render(DispatcherServlet.java:1228)atorg.spr ingframework.web.servlet.DispatcherServlet.processDispatchResult( DispatcherServlet.java:1011)atorg.springframework.web.servlet.Di spatcherServlet.doDispatch(DispatcherServlet.java:955)atorg.spri ngframework.web.servlet.DispatcherServlet.doService(DispatcherSer vlet.java:877)atorg.springframework.web.servlet.FrameworkServlet .processRequest(FrameworkServlet.java:966)atorg.springframework. web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)atj avax.servlet.http.HttpServlet.service(HttpServlet.java:707)atorg .springframework.web.servlet.FrameworkServlet.service(FrameworkSe rvlet.java:842)atjavax.servlet.http.HttpServlet.service(HttpServ let.java:820)atorg.mortbay.jetty.servlet.ServletHolder.handle(Se rvletHolder.java:487)atorg.mortbay.jetty.servlet.ServletHandler$ CachedChain.doFilter(ServletHandler.java:1093)atorg.springframew ork.web.filter.CharacterEncodingFilter.doFilterInternal(Character EncodingFilter.java:88)atorg.springframework.web.filter.OncePerR equestFilter.doFilter(OncePerRequestFilter.java:107)atorg.mortba y.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandle r.java:1084)atorg.mortbay.jetty.servlet.ServletHandler.handle(Se rvletHandler.java:360)atorg.mortbay.jetty.security.SecurityHandl er.handle(SecurityHandler.java:216)atorg.mortbay.jetty.servlet.S essionHandler.handle(SessionHandler.java:181)atorg.mortbay.jetty .handler.ContextHandler.handle(ContextHandler.java:726)atorg.mor tbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)at org.mortbay.jetty.handler.ContextHandlerCollection.handle(Context HandlerCollection.java:206)atorg.mortbay.jetty.handler.HandlerCo llection.handle(HandlerCollection.java:114)atorg.mortbay.jetty.h andler.HandlerWrapper.handle(HandlerWrapper.java:152)atorg.mortb ay.jetty.Server.handle(Server.java:324)atorg.mortbay.jetty.HttpC onnection.handleRequest(HttpConnection.java:505)atorg.mortbay.je tty.HttpConnection$RequestHandler.headerComplete(HttpConnection.j ava:829)atorg.mortbay.jetty.HttpParser.parseNext(HttpParser.java :514)atorg.mortbay.jetty.HttpParser.parseAvailable(HttpParser.ja va:211)atorg.mortbay.jetty.HttpConnection.handle(HttpConnection. java:380)atorg.mortbay.io.nio.SelectChannelEndPoint.run(SelectCh annelEndPoint.java:395)atorg.mortbay.thread.QueuedThreadPool$Poo lThread.run(QueuedThreadPool.java:488)通过分析jar包及报错信息,猜测很可能是hadoop的 jar与Javaweb的某个jar有冲突导致,最终加入了exclusive,终于可以搞定了Id>org.apache.hadoophadoop-commontId>2.2.0d>jsp-2.1org.mortbay.jettyjsp-api-2.1org.mortbay.jettyjettyorg.mortbay.jettyjetty-utilorg.mortbay.jettyjasper-runtimetomcatjasper-compilertomcatcommons-clicommons-clijersey-corecom.sun.jerseyjersey-jsoncom.sun.jerseyjersey-servercom.sun.jerseyorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname''cstPolicyServiceImpl'':Injectionofautowireddependenciesfailed;nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Couldnotautowirefield:privatecsc.hxl.policy.api.PolicyServicecom.gsshop.biz.cst.service.impl.CstPolicyServiceImpl.policyService;nestedexceptionisorg.springframework.beans.factory.NoSuchBeanDefinitionException:Nomatchingbeanoftype[csc.hxl.policy.api.PolicyService]foundfordependency:expectedatleast1beanwhichqualifiesasautowirecandidateforthisdependency.Dependencyannotations:mailto:%7b@org.springframework.beans.factory.annotation.Autowired(required=true)%7d{@org.springframework.beans.factory.annotation.Autowired(required=true)}解决办法:添加dubbo-consumer.xml |
|