Apache-tomcat 6.0.39 webapps类加载器与JVM类路径

时间:2014-08-22 19:58:58

标签: tomcat classpath classloader

我有一个与服务框架耦合的Web应用程序。该框架像任何Java应用程序一样启动,并且在引导序列的最后,它在同一个JVM中启动catalina tomcat。 我使用JVM 7和Tomcat 6.0.39。

我创建了一个新服务,应该从具有“view”,“model”和“controlle”的现有服务中重用。对于webapps部分,我使用struts。

一开始,新服务应该是在一个好的架构中完成的,但是由于时间很短,我想重用现有应用程序中没有很好设计的部分代码。

我需要使用一个类(具有其他依赖类),该类在WEBINF / Classes / com ....中并由现有的webapp使用。

我的第一次尝试是向JAVA类路径添加xxx / webapps / WEBINF / Classes的路径,其中包含所有必需的包。我运行了完整的应用程序,我的新服务还可以。问题是我让Apache Tomcat不高兴告诉它无法加载struts - > ActionForm的。

我做了以下测试:在运行正常的应用程序版本上,我刚刚添加到用于启动JVM的脚本的类路径中xxx / webapps / WEBINF / Classes的路径。我启动了应用程序,我直接遇到了问题。如果我删除对xxx / webapps / WEBINF / Classes的引用,那么一切顺利。

第一个问题:在同一个JVM实例中通过Catalina.start()启动时,catalina继承的JVM启动时使用的类路径是什么?

第二个问题:我觉得如果一个类在JVM类路径中并且存在于xxx / webapps / WEBINF / Classes中,那么apache Tomcat会感到困惑,它说它找不到struts类了。你观察到了吗?任何解决方案?

你有解决我问题的方法吗?

1 个答案:

答案 0 :(得分:0)

以下是我的问题的答案:)

一旦你用类路径向Tomcat提供(不要忘记是一个嵌入式启动),那么所有依赖的库都应该以相同的方式结合。不要指望Tomcat使用它的类加载器来查找它们。 另一种可能的方法是配置一个共享的lib路径,但我没有在我的情况下导致工作情况。

亲切的问候,

Vlad VALICA