`
tcking
  • 浏览: 10118 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

定位web开发中的jar包冲突

    博客分类:
  • j2ee
阅读更多

几天前接到一个技术支持,现场的描述是war从tomcat移植到was7后部分页面不能编译,从页面和日志看,错误很明确,提示找不到方法“noSuchMethod”,可以肯定的是应用服务器加载了错误版本的class。

 

处理的过程:

1.从现场要来对应的war,找到jar,反编译发现class中存在相关的方法

2.可能lib中有多个同名的class,使用winrar的搜索功能,搜索整个lib下的所有jar,发现两个,但是反编译看class是正确的。

3.可能was7加载了应用服务器lib目录下或共享目录的jar,到网上搜了下was7的类加载次序,受was的设置和共享库等因素的影响,找起来不就麻烦,想想可以写一个jsp找出指定class的加载路径,以后遇到类似的问题还可以复用。

完整的jsp代码如下:

 

<%@page pageEncoding="UTF-8"%>
<%@page import="java.net.URL" %>
<%@page import="java.io.*" %>
<%!
String getClassPath(String className){
	StringBuffer sb=new StringBuffer("<b>className</b>:"+className+"<br>");
        try {
        	Class z=Class.forName(className);
            String path = z.getName().replace(".", "/");   
            path ="/"+path+".class";
            URL url=z.getResource(path);   
            if(url!=null){
            	sb.append("<b>class loader</b>:"+z.getClassLoader());
				sb.append("<br><b>class path</b>:"+url.getPath());
            }else{
            	sb.append("class not loaded by any classLoader");
            }
        } catch (Exception e) {
        	e.printStackTrace();
			 StringWriter writer = new StringWriter();
            PrintWriter pw = new PrintWriter(writer);
            e.printStackTrace(pw);
            pw.close();
			sb.append("error:"+e);
			sb.append("<br><pre>"+writer.toString()+"</pre>");
        }   
        return sb.toString();   
    }
%>
<html>
<head><title>find class path</title>
<style>
*{font:14px;}
b{font-weight:bold;}
</style>
</head>
<body>
<form action="<%=request.getRequestURI()%>">
class full name:<input type=text name=className size=60 /><br>
<input type=submit value=submit />
</form>
<hr>
<%
String className=request.getParameter("className");
if(className!=null && !"".equals(className)){
	out.println(getClassPath(className));
}
%>
</body>
</html>

 

 将jsp放到应用中,访问此jsp,在input中输入要定位加载路径的class的全名,测试一下com.ibm.db2.jcc.DB2Driver


能看到加载的class loader和加载的path,输入错误日志中提示的类,发现加载的classpath就在app的lib下面,最后找出实际运行的class和发给我的不是同一个。

 

 

  • 大小: 48.8 KB
分享到:
评论

相关推荐

    开发用jar包整理

    在Java Web开发中,JAR(Java Archive)文件扮演着至关重要的角色。它们是Java类库的容器,封装了一系列的类、资源文件以及元数据,方便开发者在项目中复用代码,实现模块化。本资源“开发用jar包整理”显然是一个...

    开发中 jar包大全 只有想不到没有找不到

    无论是进行Web开发、数据库操作、图形用户界面设计,还是进行网络通信、数据解析,开发者都可能在这个集合中找到相应的库。 描述中的“基本上你在实际开发中 所有的jar包都存在 而且相对的组合在一起”进一步强调了...

    Selenium WebDriver 所需jar包

    在实际开发中,根据项目需求,你可以选择性地导入这些jar包。例如,如果你只需要支持Chrome浏览器,那么只需要引入ChromeDriver的相关jar;如果需要跨浏览器测试,那么可能需要引入多个浏览器的驱动。正确配置和使用...

    java项目所需jar包集合

    在实际开发过程中,还需要注意版本的兼容性,确保所有jar包能协同工作,避免冲突。同时,现代项目更倾向于使用构建工具如Maven或Gradle来管理和自动化依赖的引入,但这个jar包集合对初学者或者没有构建工具环境的...

    SpringMVC所需jar包

    以上这些jar包构成了SpringMVC开发的基本环境,但实际项目中可能还需要根据具体需求添加其他库,例如数据库驱动、模板引擎、安全框架等。推荐使用构建工具如Maven或Gradle来自动管理这些依赖,以确保版本兼容性和...

    struts2的jar包

    在Java Web开发中,JAR(Java Archive)文件是一种归档格式,用于打包多个Java类和资源文件。Struts2框架依赖于一系列的JAR包来提供其功能。这些JAR文件包含了类库、接口、枚举、注解和其他必要的组件,使得开发者...

    myeclipse10.7导出项目报错所需的jar包

    如果说明文件中没有提供详细步骤,通常的处理方式是将jar包复制到项目的"WEB-INF/lib"目录下,然后在MyEclipse中刷新项目,让IDE识别并自动添加到构建路径。 此外,如果项目使用了Maven或Gradle等构建工具,确保pom...

    springmvc和mybatis整合的所有jar包

    SSM(Spring MVC、Spring、MyBatis)是Java Web开发中常见的三层架构组合,它将Spring MVC作为表现层框架,Spring作为业务层容器,MyBatis作为数据访问层。在进行SSM整合时,正确地引入和配置相关jar包是关键步骤。...

    java常用jar包集合

    Java开发过程中,JAR(Java Archive)包是不可或缺的一部分,它们包含了编译后的类文件、资源文件以及其他元数据,使得代码能够被有效地组织和分发。"java常用jar包集合"这个压缩包文件,正如其标题所言,可能包含了...

    java所有部分的jar包

    Spring框架包含多个模块,如Spring Core、Spring MVC、Spring JDBC、Spring ORM等,涵盖了Web开发、数据访问、事务管理等多个方面。 1. Spring Core:它是Spring框架的基础,提供IoC(Inversion of Control,控制...

    SSH框架精简jar包

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架。它们分别负责MVC模式中的Action层、业务逻辑层和数据持久化层。SSH框架的精简jar包旨在解决在项目开发中由于引入过多不必要...

    java学习之jar打包详解

    在Java开发中,JAR文件扮演着多种角色,包括代码的组织、压缩、优化以及实现版本控制等。 首先,打包是Java开发中的一个关键步骤,它将编译后的.class文件集合到一起,形成JAR文件。通过`jar`命令或者构建工具如...

    rest jersey 所必须的jar包

    本篇文章将详细介绍在开发REST服务时,使用Jersey所需的核心jar包以及它们在构建RESTful应用中的作用。 1. **jersey-server.jar**:这是Jersey的核心组件,提供了REST服务的服务器端实现。它包含了处理HTTP请求、...

    jboss打包不起作用,替换jar即可

    - **依赖冲突**:可能是由于你的应用中包含了某个特定版本的jar包,而JBoss本身也包含了一个不同版本的同一jar包,导致类加载器优先加载了服务器中的jar,造成运行时错误。 - **缺失依赖**:也可能是你的应用在...

    帆软v0.20jar包

    - 在项目开发中,对不同版本的JAR包进行管理非常重要,避免版本冲突,确保软件的兼容性和稳定性。 - Maven或Gradle等构建工具可以帮助开发者管理和依赖JAR包,自动下载并管理它们的版本。 6. **调试与问题排查**...

    学习构建SSM框架(SpringMVC+Spring+Mybatis)需要的jar包

    SSM框架,即SpringMVC、Spring和Mybatis的整合,是Java开发中常见的Web应用程序框架。这三种技术分别承担了不同的职责:SpringMVC负责处理HTTP请求,Spring提供了依赖注入和事务管理等功能,而Mybatis则作为轻量级...

    Myeclipse2015导出war报错时的替换jar包

    在IT行业中,开发人员经常需要将项目打包成可部署的形式,比如WAR文件,这是一种Web应用程序的标准打包格式。MyEclipse是IBM提供的一款强大的Java EE集成开发环境,它为开发、测试和部署Java Web应用提供了全面的...

    Myeclipse下对SSI框架支持的jar包

    这些jar包经过精心整理和测试,确保了它们与MyEclipse的兼容性,并且能够处理大部分基于SSI的Web开发需求。这使得开发者无需离开熟悉的MyEclipse环境,即可便捷地进行包含SSI功能的网页开发。 首先,了解SSI的基本...

    dom4j jar包

    在实际开发中,DOM4J常用于XML配置文件的解析、Web服务的数据交换、XML数据的存储和检索等场景。例如,Spring框架就大量使用DOM4J来处理其配置文件。 总之,DOM4J作为一个强大的XML处理工具,不仅提供了全面的API,...

Global site tag (gtag.js) - Google Analytics