Rox*_*ana 6 java tomcat classloader
在tomcat中部署的war中有两次相同的编译类会发生什么?(我知道这不是一个好习惯,等等,但是现场背后会发生什么?)
是否存在令人讨厌的副作用的可能性?
如果你有一个类在WEB-INF/classes中而另一个在jar中,那么WEB-INF/classes中的一个将具有优先权.
如果这两个类都在一个jar中,那么其中一个将被占用而另一个被忽略.选择的那个取决于类加载器的实现细节,并且可以从环境到环境不同.
因此,可能会在开发中选择正确的类,而生产中的错误类会导致难以调试的问题.解决此问题的唯一方法是从WAR中删除所有重复的类,这样只会在任何地方选择一个类.
如果你想检测所有这些类型的重复项,请看看我写的这个工具,JHades.它包括一个命令行工具,列出WAR中的所有重复项:
java -jar jhades-standalone-report.jar path/to/war/webapp.war
>>>> Jar overlap report:
poi-3.5-FINAL-20090928.jar overlaps with poi-3.7-20101029.jar - total overlapping classes: 990
xercesImpl-2.7.0.jar overlaps with xercesImpl-2.9.1.jar - total overlapping classes: 867
xalan-2.6.0.jar overlaps with xalan-2.7.1.jar - total overlapping classes: 711
bcel-5.2.jar overlaps with xalan-2.7.1.jar - total overlapping classes: 361
xml-apis-2.9.1.jar overlaps with xml-apis.jar - total overlapping classes: 301
jasperreports-applet-3.7.1.jar overlaps with jasperreports-javaflow-3.7.1.jar - total overlapping classes: 254
jasperreports-3.7.1.jar overlaps with jasperreports-applet-3.7.1.jar - total overlapping classes: 254
...
Total number of classes with more than one version: 6169
Run Code Online (Sandbox Code Playgroud)
我希望这种行为与您在其他地方遇到这种情况时的行为相同。
将使用类加载器找到的第一个类,其他类将被忽略。
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |