Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类加载器、web应用程序和war文件的lib目录_Java_Tomcat_Jvm_Classloader - Fatal编程技术网

Java 类加载器、web应用程序和war文件的lib目录

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应用程序都将使用相同的静态成员。也

在挖掘classloader之后,出现了一个问题

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

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

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

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。