我无法弄清楚(仅有4个月的J2EE经验),是classpath和lib文件夹的范围(WEB-INF / ...) 为什么2个地方用于加载课程? 在服务器启动时,首先“读取”的类是什么? 为什么在classpath中加载所有类是不够的?
谢谢
答案 0 :(得分:2)
应用程序服务器首先查看模块的lib目录,然后查看全局类路径 - 如果有的话。
通常,在运行时无法替换通过应用程序服务器的全局类路径加载的类。这意味着您必须停止并重新启动整个应用程序服务器以升级或替换代码,这在生产环境中通常是不可接受的。它还意味着应用程序或模块的类和jar文件可能与应用程序服务器自己的代码或部署到同一应用程序服务器的其他应用程序冲突。
您正在使用的应用程序服务器的文档可能会禁止或强烈反对修改全局类路径。
应用程序服务器通常为每个应用程序创建单独的类加载器实例。这样做允许应用程序服务器隔离每个应用程序的代码依赖性,并且可以重新加载甚至卸载模块。
从一开始就使用Java的当前类加载器模型很难理解,并且很快就会导致非常复杂的问题。不幸的是,在集成测试和生产环境中经常遇到很多这些问题。像OSGi这样的框架试图解决其中的一些问题,并且在JCP过程中有各种各样的举措来改进类加载和依赖管理以及Java规范。