Java 类加载器、web应用程序和war文件的lib目录
在挖掘classloader之后,出现了一个问题 假设我们有一个library.jar,我们可以将它放在类路径中,它将由系统的类路径加载器加载 我们还可以把它放在war文件的lib目录中。它将由单个web应用程序类加载器加载 假设library.jar有一个带有静态成员字段的类:Java 类加载器、web应用程序和war文件的lib目录,java,tomcat,jvm,classloader,Java,Tomcat,Jvm,Classloader,在挖掘classloader之后,出现了一个问题 假设我们有一个library.jar,我们可以将它放在类路径中,它将由系统的类路径加载器加载 我们还可以把它放在war文件的lib目录中。它将由单个web应用程序类加载器加载 假设library.jar有一个带有静态成员字段的类: static a=1; //member of some class in library.jar 如果library.jar是由CLASSPATH加载程序加载的,则意味着所有web应用程序都将使用相同的静态成员。也
static a=1; //member of some class in library.jar
如果library.jar是由CLASSPATH加载程序加载的,则意味着所有web应用程序都将使用相同的静态成员。也许这会干扰
因此,我认为最好的方法是将library.jar放在lib目录中,是真的吗?将尽可能多的jar文件放在war文件的lib目录中。这样,您就可以在web应用程序之间实现最佳隔离,并且不会因同一库的不同版本而发生冲突 如果您需要在两个web应用程序之间共享全局数据(这种情况很少见),那么将该库放入Tomcat的lib目录中。您可能需要对用于访问数据库(如ojdbc6.jar)的库执行此操作
永远不要在类路径上放置额外的库。如果库有这种行为,那么它属于war。