任何人都可以解释从Tomcat中的lib目录加载jar文件的顺序吗? 它是否按字母顺序排列?随机?或者其他一些命令?从lib目录加载jar文件的顺序
回答
全部描述在Tomcat's ClassLoading HOW-TO。这不一定是按字母顺序。如果你观察到这种行为,那么如果你打算让你的web应用程序跨服务器移动,它应该被依赖于绝对不是。例如,Tomcat 6“巧合”地命令它,但Tomcat 8不会。
概述的,加载顺序如下:
- 引导/系统(
JRE/lib
,然后server.loader
) - web应用库(
WEB-INF/classes
,然后WEB-INF/lib
) - 公共库(
common.loader
,然后Tomcat/lib
) - webapp-shared libraries(
shared.loader
)
如果你想保证JAR X之后 JARŸ加载,那么你需要把JAR X中出现上述列表中后的地方之一。
但也有例外然而,这是在tomcat docs
最后提到,Web应用程序的类加载器总是首先委托为被Tomcat(的Servlet,JSP,EL,WebSocket的实施规范JavaEE的API类)。 Tomcat中的所有其他类加载器都遵循通常的代理模式。
这意味着如果webapp包含任何JavaEE类(javax.*
),那么它将被tomcat忽略。
对于每个加载器,只要JVM按照需要导入/执行并且尚未加载的顺序,这些类就会按顺序加载。
实际上,它是按字母顺序排列! (在一个特定的目录,如“lib”目录下,原来的海报提及。)
更确切地说,如果你看一下源为Tomcat 6,在FileDirContext
类,文件的阵列上list()
调用Arrays.sort()
方法找到的罐子名称。
我也手动测试过。我用一个叫做HelloWorld.getGreeting()
的JSP创建了一场战争,并将两个几乎完全相同的包含HelloWorld
的版本的jar放到WEB-INF/lib目录中。一个说“你好,世界”,另一个说“再见,残酷的世界”。
如果我将“Hello,world”版本的a.jar和“goodbye”版本的b.jar命名为,并重新启动Tomcat,则会显示“Hello”文本。如果我用另一个方式命名罐子并重新启动Tomcat,我会得到“Goodbye”文本。
据我已经能够确定,这种行为是没有记录,没有指定,不应该依靠。但现在是按字母顺序排列的。
我完全同意BalusC提供的答案。仅指向添加是指从各个类加载器加载JAR时,它会检查字母顺序。
我有一种情况在我的web应用程序中加载“XSSFWorkbook”以从Excel表格读取数据,并且有两个JARS“poi-ooxml-3.9.jar”和“org.eclipse.birt.runtime_4.3.1.v20130918- 1142.jar“,具有相同的类名和包结构。我只是将它的后面的字母顺序重新排列,并且它为我提供了一个技巧。只是想分享一样。
好运
订购WEb-INF/lib文件夹中已加载的罐子。
对于tomcat 5-7,订单是按字母顺序的。它使用排序。
对于tomcat 8是随机决定的底层文件系统。
你正在接听或问一个新问题吗? – 2014-10-30 00:24:22
猜一猜:)。我在回答。 – user2193008 2014-11-04 15:51:42
请花些时间重新格式化您的答案,以使其看起来像一个答案。看看[如何写出一个好答案](http://stackoverflow.com/help/how-to-answer),看看如何改进你的答案。 – 2014-11-04 16:00:03
- 1. Tomcat中的jar文件7 lib目录
- 2. lib目录中jar文件的位置
- 3. Rails的LIB加载顺序
- 4. 从与jar文件相同的目录加载log4j2.xml文件
- 5. 从与jar文件相同的目录加载文件
- 6. jBoss 4.2.3:在\ server \ default \ lib里加载jar的顺序是什么
- 7. Magento:如何从lib目录加载js文件?
- 8. 从jar或目录加载时文件的行为不同
- 9. 如何加载项目lib文件夹中的jar文件中的弹簧豆
- 10. 从.war文件加载类的顺序
- 11. 从web-inf \ lib \ *代码文件加载jar
- 12. 如何从jar或目录加载类
- 13. Java从jar加载文件
- 14. 在Grails项目lib目录中找不到jar文件
- 15. 从项目目录加载XML文件
- 16. 无法加载这样的文件位于lib目录中
- 17. Gradle多项目和lib jar目录
- 18. 使用Trinidad(JRuby和RoR 3)时从lib目录中重新加载jar
- 19. 如何从jar文件中加载.wav文件,而没有与jar文件相同的目录中的资源
- 20. Maven - Jar中lib目录中的依赖项文件夹
- 21. 从插件目录加载文件
- 22. 如何更改从WEB-INF/lib加载的Jars的顺序?
- 23. 无法从jar文件加载文件
- 24. 在Tomcat上以特定顺序加载Jar文件6
- 25. 定制Tomcat Realm和Lib目录中的JAR的整个负载
- 26. 的Java - 运行JAR拒绝加载文件在同一目录
- 27. 如何动态加载目录中的所有jar文件?
- 28. 在WAR文件的lib目录中包含源JAR(Web应用程序)
- 29. 无法从lib文件夹加载类
- 30. 从jar加载xslt文件加载jar本身,而不是xslt
类似:http://stackoverflow.com/q/8364619/435605 – 2015-02-24 09:43:15