实际上,它取决于许多因素:
如果两个jar文件都位于同一ClassLoader中,例如Java classpath(
-cp
选项),则通常它应该是jar列表顺序中找到的第一个文件。如果部署在JavaEE容器中(如EAR文件或
WEB-INF/lib
WAR文件中),则不能保证容器将在两次启动之间加载相同的类。在这种情况下,唯一肯定的是,WEB-INF/classes
之前搜索WEB-INF/lib
在复杂的ClassLoader层次结构中,默认行为是“父先搜索”,但是JavaEE实现引入了诸如父后策略(WebSphere)或由于部署描述符(WebLogic,JBoss / WildFly)进行过滤的机制
一个选项可能是由于该属性而在
meta-INF/MANIFEST.MF文件中声明jar文件的依赖关系
Class-Path。它应该在ClassLoader级别强制执行加载顺序,尤其是在开始时,
java -jarmyapp.jar但它可能取决于JavaEE上下文中的实现。
备注:
在使用开源项目时,提交变更请求并发布您的变更或改进以使社区从中受益可能是公平的。这样,您的项目就可以更新到主流,而在ClassPath中就不会遇到这样的难题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)