在eclipse下强制使用Tomcat 5.5的类路径优先级

时间:2009-11-23 22:31:33

标签: eclipse spring tomcat

我目前正在开发一个基于Struts2&amp ;;的Web应用程序。 Spring组件与公司制框架中的一组层库相结合。

这些librairies通过嵌入在提供的jar文件中的blahblah.xml文件公开了一组spring bean。

我需要用我自己的类替换通过这些bean声明公开的一些实现类,以便在提供的处理中添加额外的东西。

设计公司制造框架的人选择通过特定的Listener& amp;将blahblah.xml文件公开给Spring。定义此类configLocations的WebApplicationContext:

ConfigurableWebApplicationContext cwac = new XmlWebApplicationContext();
cwac.setConfigLocation("classpath*:<somePath>/blahblah.xml");

目前我看到只有一种方法可以实现这项工作(但也许我错了,请告诉我!):在假目录结构中从jar中复制blahblah.xml,修改实现副本中的一些bean类,然后将包含伪结构的文件夹放在webapp类路径中,以“遮蔽”原始文件。

这就是导致我能够在TOMCAT 5.5的类路径中强制执行此操作的问题,我在eclipse 3.3中用于开发。

虽然我在eclipse 3.3下的Tomcat服务器启动配置的Classpath选项卡中添加了包含伪结构的目录,但是注入的对象仍然是原始对象而不是我的。 我想我的文件夹放在TOMCAT运行类路径中的WEB-INF / lib jar之后,但我无法抓住它。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Tomcat的webapps类加载优先级大致如下:首先是bootstrap / system(JRE/lib,然后是server.loader),然后是webapp库(WEB-INF/classes,然后是WEB-INF/lib ),然后是公共库(common.loader,然后是Tomcat/lib),最后是webapp共享库(shared.loader)。

我首先将此文件添加到WEB-INF/classes(在Eclipse中:只删除src文件夹中的文件,它将自动考虑在内。)

请注意,如果没有一些繁重的自定义类加载器,则无法控制类加载优先级。您只需要知道默认的类加载顺序并明智地使用它。