引入HBase依赖包带来的麻烦

在一个项目里用到HBase做底层存储,使用maven来管理相关Jar包依赖,用maven来管理依赖包,特别不爽的就是他会将你引入Jar包自己的依赖都搞进来,经常会出现一些类和方法冲突找不到等状况。这次,也被这个搞了一阵子。我依赖了HBase jar之后,tomcat启动后,访问Web页面(使用JSP)的时候,页面直接抛出一堆异常,贴一下关键的:

java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
    org.apache.jsp.index_jsp._jspInit(index_jsp.java:22)
    org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:80)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    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:723)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

分析得出就是因为引入了apace的jasper导致的,HBase依赖的tomcat:jasper-compiler和tomcat:jasper-runtime搞得我web页面的JSP访问失败。很自然而然地就得将这个jar从hbase依赖POM里面exclude掉。然后重新打包发布即可。

总结一下:一般遇到这种问题解决思路:

1)通过异常找到关键字,确定冲突的类或者方法

2)使用mvn dependency:tree检查是从哪个依赖的POM里面搞进来的冲突

3)修改项目中POM文件中的依赖,将冲突的exclude掉

4)重新打包部署

引入HBase依赖包带来的麻烦

时间: 2024-11-08 21:21:12

引入HBase依赖包带来的麻烦的相关文章

Maven引入hadoop依赖包出错解决办法

错误: ArtifactTransferException: Failure to transfer org.apache.hadoop:hadoop-hdfs:jar:2.6.0 from http://localhost:8081/nexus/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of cen

Maven - 实例-2-使用本地仓库中的依赖包

Maven引入构建包的流程 执行mvn compile命令编译源代码,如果编译过程中需要用到其他的包, maven将会在pom.xml文件中查找是否引入该依赖包的坐标. 示例: <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </depen

JsonObject没有fromObject、idea引入maven有红线没依赖、JsonObject maven 依赖包

目录: 1.JsonObject maven 依赖包 2.idea引入maven有红线,没依赖 3.JsonObject没有fromObject \\\\\\\\\\\\\\\\\\\\\\\ 1.JsonObject maven 依赖包 一共就用一个,但是功能全就六个,我也是上网查到的. pom.xml如下: <dependencies> <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --> &l

myeclipse8.5打包jar并引入第三方jar包

用myeclipse自带的export工具,无法引入被引用的第三方的jar包,有两种方式: (1)直接export出jar包,解压jar包(第三方的jar包太多,太麻烦) 在创建好的JAR文件里找到META-INF\MANIFEST.MF 打开之后添加内容为: Manifest-Version: 1.0Main-Class: model.ExpertMainClass-path: lib/AbsoluteLayout.jar lib/jxl.jar lib/log4j.jar lib/ojdbc

Maven打包成Jar文件时依赖包的问题

我们项目中使用到第三方的库文件,这些jar库文件并没有放到Maven中央库上,导致我们需要在项目中自己配置使用.我们的两三个开发人员对Java都是很熟,因此在使用中遇到了一些问题,表现在:在本地中引入第三方jar包后,在Idea中进行相应设置后,可以调试运行了,但是用Docker打包上传到服务器后,运行时会提示找不到某些类的定义. 经查看这些找不到的类就是来自第三方库,那么问题有可能是第三方jar包的路径问题,或者是根本就没有打包进jar文件里面.我们可以去Docker容器内部查看jar文件,执

flutter如何使用配置文件pubspec.yaml(位于项目根目录)来管理第三方依赖包

官方文档 在软件开发中,很多时候有一些公共的库或SDK可能会被很多项目用到,因此,将这些代码单独抽到一个独立模块,然后哪个项目需要使用时再直接集成这个模块,便可大大提高开发效率.很多编程语言或开发工具都支持这种“模块共享”机制,如Java语言中这种独立模块会被打成一个jar包,Android中的aar包,Web开发中的npm包等.为了方便表述,我们将这种可共享的独立模块统一称为“包”( Package). 一个APP在实际开发中往往会依赖很多包,而这些包通常都有交叉依赖关系.版本依赖等,如果由开

将自己开发的依赖包加入到Maven本地仓库

Maven 在 pom 文件中加入自己开发的依赖包,这些包肯定是不在Maven仓库(http://repo.maven.apache.org/maven2/)的.那我们怎么将那些不在Maven仓库中的包加入到本地的Maven库中呢?很简单.这里以IKAnalyzer.jar包为例进行讲解. 第一步 :将IKAnalyzer.jar包存放在一个文件夹中,比如test文件夹 第二步 :建一个IKAnalyzer.jar包相关的 pom .xml文件,需要在pom.xml中定义其maven坐标及其相应

Mapreduce部署与第三方依赖包管理

Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错.本文介绍几种常用的配置方式: 1. HADOOP_CLASSPATH 在hadoop的相关配置文件中,添加CLASSPATH路径,那么在hadoop的各个进程启动时都会载入这些包,因此对于mapreduce-job jar中则不需要额外的引入这些jars,所以mapreduce-job jar会比较小[瘦jar],便于传输:但它的问题也比较明显,如

android studio学习----添加项目依赖包补充---添加github上的开源项目为库

导入maven中的库 如果开源库作者有将代码放到Maven库中,我们可以在gradle配置中直接引入,类似如下: compile 'com.github.dmytrodanylyk.android-process-button:library:1.0.1' 一般我们可以在开源库的github页面上面看有没有这样一个地址,或者到maven库中根据包名搜索有没有,我们前面这个引入的项目分三个部分 group:name:version,我们引入其他的包也有遵守这个规则. 导入gradle构建的开源库