classloader和web应用程序以及war文件的lib目录

时间:2014-05-08 18:35:54

标签: java tomcat jvm classloader

在类加载器中挖掘后,会出现一个问题。

假设我们有一个library.jar,我们可以把它放在CLASSPATH中,它将由系统的CLASSPATH加载器加载。

我们也可以将它放在war文件的lib目录中。它将由单个Web应用程序类加载器加载。

假设library.jar有一个带有静态成员字段的类:

static a=1; //member of some class in library.jar

如果library.jar由CLASSPATH加载器加载,则意味着所有Web应用程序看起来这个静态成员都是相同的。并且可能会干扰!!

所以,我认为最好的方法是将library.jar放在lib目录中,是真的吗?

1 个答案:

答案 0 :(得分:0)

将尽可能多的jar文件放入 war 文件的 lib 目录中。这样,您就可以在Web应用程序之间实现最佳隔离,并且不会出现有关同一库的不同版本的冲突。

如果您需要在两个Web应用程序之间共享全局数据(这很少见),请将该库放入Tomcat的 lib 目录中。您可能需要为用于访问数据库的库执行此操作,例如ojdbc6.jar。

永远不要在CLASSPATH上添加其他库。