我以前问过一个相关的问题--但这并不完全一样。早些时候我被告知,如果问题有点不同,不要在同一个帖子中提出额外的问题。所以我发布了这个新问题。如果我不应该这样做,请告诉我。
我有一个web应用程序(war文件)。属于apache-commons-lang的Jar与其他jar文件一起添加到WEB-INF库中。但是,与apache-commons-lang相关的较早版本的jar也存在于系统库中,并且在部署时,系统类路径中的jar文件优先,并且我得到了"classnotfound“错误。必须为WEB-INF中指定的类指定prefer WEB-INF- classes,才能优先于系统Classloader.However中存在的类。我只希望这个特定的jar优先于系统类加载器。当我发布了类似的问题时,有人建议我在weblogic中使用“过滤类加载器”。当我有耳朵的时候,这个解决方案效果很好。但是,我不能在war文件中添加weblogic-application.xml,也不能使用这个类加载器过滤概念。有没有出路?谢谢。
发布于 2011-12-30 01:37:12
我对WebLogic不是很熟悉,但是如果你知道新的jar是如何使用的,并且该代码的入口就像实例化一个类并执行一个启动方法一样简单,那么你可能会得到一个定制的类加载器?请参阅http://tshrestha.blogspot.com/2011/12/using-custom-classloader.html上的示例
但我承认,一些WebLogic专家知道如何通过WebLogic本身的一些配置来实现这一点。
发布于 2012-02-21 16:01:45
我的一位同事指出,在weblogic.xml中指定相关的包可以解决这个问题。然而,它还没有尝试过。
<wls:prefer-application-packages>
<wls:package-name>javax.faces.*</wls:package-name>
<wls:package-name>com.sun.faces.*</wls:package-name>
<wls:package-name>javax.xml.*</wls:package-name>
<wls:package-name>org.apache.xerces.*</wls:package-name>
<wls:package-name>antlr.*</wls:package-name>
<wls:package-name>org.apache.log4j.*</wls:package-name>
<wls:package-name>org.apache.commons.*</wls:package-name>
</wls:prefer-application-packages>发布于 2012-03-21 18:06:45
我不是weblogic专家,但我看到了两种方法(没有尝试过,只是猜测)
1)只在WEB-INF中保留所需的war,并将其余war移动到不同的位置,并将它们指向war的MANIFEST.MF
2)将war捆绑到一个空白ear中,并在ear的MANIFEST.MF中指定所有jars,并在weblogic-application.xml中指定首选项类。这个想法是让war和ear成为同一个应用程序的一部分,这样web应用程序就可以使用相同的类加载器(而不是使用‘prefer web-inf-classes’)。
编辑:对于第一点,我验证了weblogic忽略了war文件的Manifest文件。因此,第一个sol不起作用。另外,关于第二个解决方案,如果ear中没有ejb,weblogic会盲目地忽略ear的Manifest。因此,您必须将WAR库移动到APP-INF\lib或简单地移动到ear的lib目录,并在weblogic-application.xml中指定首选包apache-commons-lang。无论如何,不要认为这是一个有效的解决方案(特别是当您不想仅仅为了创建一个ear而创建它时)
https://stackoverflow.com/questions/8654862
复制相似问题