这是我的同事的一个错误:有一个名为test.jar的jar,他修复了一个bug.然后他重新编译代码并构建了一个名为testnew.jar的新jar.问题是他将这两个jar放入classpath中的一个文件夹中.因此,当程序运行时,行为是一种混乱.我不知道发生了什么事,但在删除test.jar之后,everthing又恢复了.
所以我想知道JVM的行为是什么.它是否在它遇到的第一个jar中使用类文件?或者是其他东西?
谢谢.
是的,默认情况下它使用第一个jar的类.这就是为什么你必须检查库目录中的重复项.对我和我的同事们来说,这么多次.
据我所知,它没有定义.
Java有一个可插入的类加载器系统,因此知道将要发生什么的唯一方法是查看ClassLoader类的文档,可能特别是ClassLoader#findClass方法,它没有为此定义行为,并查看相关的部分在的JLS和JVM规范均未,似乎在这方面来指定的类加载器的约束.因此,除非您的Web容器使用的类加载器记录了该行为,否则您无法确定将加载哪个类.
该赔率是第一个发现匹配类的二进制名称将是一个加载的,但有一个很大的行为,我们假设是这种情况,那就是规定和/或记录的行为之间的区别.
| 归档时间: |
|
| 查看次数: |
5332 次 |
| 最近记录: |