RT 我可能问的有些问题 先说下问题情况
一个项目中存在两个相同的JAR包 但是版本不一样 该项目在WINDOWS下运行正常 换到LINUX就会出现错误
出现错误的原因是LINUX貌似选择的版本比较靠前的JAR包 而WINDOWS貌似选择的是版本比较靠后的JAR包 
这是为什么?

解决方案 »

  1.   

    我不是说有版本选择 我只是想知道为什么WINDOWS下可以换到LINUX下就不行 我头一回对JAR如何被使用这方面的知识感兴趣..http://topic.csdn.net/u/20100408/18/91852a92-8793-4139-9aec-5949afafac6f.html?69716
    这个是散分帖 可以去领分..
      

  2.   

    你自己可以测试一下啊,jar是java归档文件的意思啊,也就是说对于jar包的引用,引用的是class文件,只有至于WEB-INFO下,开发时,需在classpath中,才可以被引用
      

  3.   

    刚刚做了个测试,根据测试结果来看,就eclipse来讲,是先入为主的规律,两个完全相同的jar包是先加进去的被使用。从jar包中的.classpath也可看出排前的被使用。eclipse将整个工程打包时基本也会按照当初手动加入jar包的顺利来编写.classpath的。
    (以上确定)
    不过我在war中没找到任何与path有关的配置文件,可能web容器根据规范会前往lib下找jar包吧,如果是这样,jar包优先级的选择就和web容器的实现有关了。
    (以上猜测)呵呵,又是一个猜测。
      

  4.   

    没在Linux下做过东西,时刻关注此贴!
      

  5.   

    也许也是路径问题.   windows下对路径要求没那么严格.   而linux就很严格.   对web容器来说.找一个类就是通过类地址来找.  而引入的两个包...  类地址肯定是 一样的.  那linux下应该会晕掉.  以上也是猜测  jar对linux来说.就是一个特殊的文件夹 加载前是两个文件夹.. 加载之后.可能就当成一个了.  不详  - -  等高人
      

  6.   

    NoSuchMethodError:   嘿嘿.这个error 倒是有点映证我的想法.嘿嘿.
      

  7.   


    这个问题跟MYECLIPSE的CLASSPATH没关系 这个CLASSPATH只是负责告诉MYECLIPSE在发布项目的时候去哪里寻找JAR包 大概吧 LOOK下面的..
    http://hawktiger2008.javaeye.com/blog/460751关键是 LINUX与WINDOWS的区别 两方容器都一样(不会是因为LINUX下的JBOSS跟WINDOWS下的JBOSS不一样吧..)
      

  8.   

    好象不是路径问题了 可能是不同操作系统下的JBOSS有区别.. 我昨天也是在搜索错误原因的时候并没有找到跟我出现错误原因相同的(详情看散分贴) 然后我就想是不是JAR包重复的问题(因为出现了NUSUCHMETHOD了 凑巧我还搜索到了两个同样的包 就是版本不同) 于是尝试性的删除掉了版本靠前的 于是那个问题就解决了
      

  9.   

    铁定是包冲突...  就是等有高人来说冲突的时候. jvm是如何工作的. 是吧.哈哈.
      

  10.   

    一样...   在想用eclipse发布和war包发布有啥区别..  另外.  在不同系统中..  web容器的工作原理可能也有区别..  这个问题可以到linux区问下
      

  11.   

    这个问题你要了解一下linux系统的特性 , 他的应用软件一般是兼容老版本的 ,对于jar包夜是这样
      

  12.   

    怎么说呢,java文件被编译成class的时候,都有个版本号(和jdk版本有关系),而这个版本号和java服务加载class(及时被打成了jar包,其实jar的编译过程都有版本,还不用说用java -g的编译模式了)时候有关系。
    在liunx下和windows下的jdk实现是不一样的(具体哪儿不一样问google去,因为偶也说不清楚,说清楚估计要写个几十万字的论文了,呵呵),因此就出现了jar包加载顺序的问题。其实这个问题归根到底还是是jar的版本冲突。
      

  13.   

    关注,貌似听过,win下先加载,先使用的原则。Linux 下 不知道。。
      

  14.   

    去加载jar 的方式不同 估计是这个样子  
      

  15.   

    你难道把两个jar包导进去会出错?
      

  16.   

    在工程的WEB-INF下面放入复制然后粘贴这两个jar包,然后导入试试
      

  17.   

    你把不想要的那个包删除,重启eclipse 
      

  18.   

    若果你不是用ied的话 是不是包导错了,看看共同文件
      

  19.   

    肯定是冲突了,一般的jar包都是向下兼容的,你把最新的jar包留下来,把老的删了,这样就没有问题了。
      

  20.   

    一个项目中放两个相同的 jar 本身就是没事给自己找事做!
      

  21.   

    我不觉得是Win or Linux的缘故。倒是觉得与你的WEB容器or 应用服务器。
    毕竟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
      

  22.   

    classPath错误,建议你看看jvm类加载机制就会明白了
      

  23.   

    哈哈,38L的看法和我一致哟。
    用到多个框架时(典型的例子是struts/hibernate/spring)如果不仔细挑拣、删除一些重复的jar包,确实很有可能重复。
      

  24.   

    我还是看书吧...虽然看不懂...去寻找ZANGXT大哥会好些...?