我已经在dropins文件夹中部署了一个耳朵,并且耳朵中的一个war文件引用了我保存在文件夹外的jar(Shared-> config-> lib-> global)。我保留全局文件夹的外部罐子再次引用驻留在耳朵中的几个罐子,这次我得到" java.lang.NoClassDefFoundError"
您能否建议如何参考。
server.xml
<webApplication contextRoot="/xyz" id="zyx" location="xyz.ear" name="xyz" type="ear">
<classloader commonLibraryRef="global,filterjars"></classloader>
</webApplication>
答案 0 :(得分:1)
公共共享库无法从应用程序二进制文件加载类。使用公共库时,您可以将它们视为单向连接。 应用程序的类加载器可以委托给公共共享库,但不能相反。
公共库被实现为它们自己的类加载器,因此它们必须包含所有依赖项。
另一方面,私有库将其类路径附加到应用程序类加载器的类路径中 - 因此它们可以加载应用程序提供的类,但这不是一个好习惯。例如,如果私有库依赖于application1提供的ClassA,那么它对application1可以正常工作,但可能会在可能不提供ClassA的application2中中断(或者可能提供不兼容的版本)。
如果共享库中的类依赖于应用程序中的类,我建议将所有这些类放在共享库中 - 或者将所有共享库类放在应用程序中(或者WAR等)。 )。我个人更喜欢后者 - 自包含的应用程序更便携,不太可能遇到类加载器/依赖性问题(即app1需要某些依赖项的X版本,但app2需要版本X + 5 ...)。
希望这有帮助, 安迪