配色: 字号:
java--遇到NoSuchMethodError通用解决思路
2017-03-31 | 阅:  转:  |  分享 
  
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
-api
javax.servlet.jsp
ion>
org.apach
e.hadoop
hadoop-hdfs
2.6.0
servlet-ap
i
javax.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
doop
hadoop-client2.
6.0
servlet-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.jetty
jet
ty
org.mortbay.jetty

jetty-utilorg.mor
tbay.jetty
jasper-
runtime
tomcat
usion>jasper-compilertomcatgroupId>commons-clictId>commons-clitifactId>jersey-corecom.sun.jerseyd>jersey-json
com.sun.jersey
actId>jersey-servercom.sun.jersey>

org.apache.hadoop
hadoop-hdfs
2.6.0ser
vlet-api
javax.servletn>jettyorg.mortba
y.jetty
jetty-util
org.mortbay.jetty
<
exclusion>jersey-corecom.sun.
jersey
jersey-json
com.sun.jersey
lusion>jersey-servercom.sun.j
ersey
jasper-runti
me
tomcat
>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.hadoop
hadoop-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-common
2.2.0usion>servlet-apijavax.servle
t
jasper-compiler<
/artifactId>tomcat
<
artifactId>jasper-runtimetomcat
jsp-apid>javax.servlet.jsp
ency>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
献花(0)
+1
(本文系关平藏书首藏)