RT 我可能问的有些问题 先说下问题情况
一个项目中存在两个相同的JAR包 但是版本不一样 该项目在WINDOWS下运行正常 换到LINUX就会出现错误
出现错误的原因是LINUX貌似选择的版本比较靠前的JAR包 而WINDOWS貌似选择的是版本比较靠后的JAR包
这是为什么?
一个项目中存在两个相同的JAR包 但是版本不一样 该项目在WINDOWS下运行正常 换到LINUX就会出现错误
出现错误的原因是LINUX貌似选择的版本比较靠前的JAR包 而WINDOWS貌似选择的是版本比较靠后的JAR包
这是为什么?
解决方案 »
- Struts2和Hibernate整合出错,错误提示如下,原因是什么?
- MapXtreme for Java 坐标转换
- Struts2 中jsp页面显示多行多列表格
- seve(entity)的时候,entity里的外键如何操作?
- autonomy聚类问题
- axis2客户端用rpc方式获得pojo中list和String[][]的问题
- 如何做2级菜单?在线等,解决就结贴。
- 开发中使用到了Oracle的class12.jar包
- 奇怪,struts的问题
- SpringMVC 请求不到Controller的问题
- iBatis读取配置文件时候出错..
- 如何将list列表中一个位置不固定的人名提取出来,插入到第一位,其他人名依次后排!
这个是散分帖 可以去领分..
(以上确定)
不过我在war中没找到任何与path有关的配置文件,可能web容器根据规范会前往lib下找jar包吧,如果是这样,jar包优先级的选择就和web容器的实现有关了。
(以上猜测)呵呵,又是一个猜测。
这个问题跟MYECLIPSE的CLASSPATH没关系 这个CLASSPATH只是负责告诉MYECLIPSE在发布项目的时候去哪里寻找JAR包 大概吧 LOOK下面的..
http://hawktiger2008.javaeye.com/blog/460751关键是 LINUX与WINDOWS的区别 两方容器都一样(不会是因为LINUX下的JBOSS跟WINDOWS下的JBOSS不一样吧..)
在liunx下和windows下的jdk实现是不一样的(具体哪儿不一样问google去,因为偶也说不清楚,说清楚估计要写个几十万字的论文了,呵呵),因此就出现了jar包加载顺序的问题。其实这个问题归根到底还是是jar的版本冲突。
毕竟jvm对os来说仅仅是一个普通的程序
搞java的都知道,jvm 加载类库是从classpath指定的路径开始加载,遇到第一个匹配的类就终止,jvm是不知道,也不必知道你的类库版本是否正确。说到底,还是classpath。你这种现象就是jvm加载了错误版本的jar包。别忘了,classpath有程序自己的(如WEB程序,就是WEB-INF下的classes,lib),还有容器共用的(TOMCAT的就是common),这两个地方容器都会去查找,具体先后顺序我不清楚。结论:
1)检查你的容器,以及共用classpath下的jar
2)检查你的程序,剔除重复jar中旧的,或者兼容性差的那个jar
3)自己实现个ClassLoader
用到多个框架时(典型的例子是struts/hibernate/spring)如果不仔细挑拣、删除一些重复的jar包,确实很有可能重复。