Classloader需要说明

时间:2014-12-17 16:57:28

标签: java tomcat jar

我有一个包含jar文件的目录。其中一些类在多个jar文件中可用。

List<URL> jarsToLoad = new ArrayList<URL>();
File jarDir = new File("Directory name having jar files");
for ( File jarFile : jarDir.listFiles())
{
    jarsToLoad.add( new URL("file", null, jarFile.getPath()) );
}
Thread.currentThread().setContextClassLoader(new URLClassLoader(jarsToLoad.toArray(new URL[jarsToLoad.size()])));

jarDir.listFiles()在不同的机器上执行上述代码时以不同的顺序列出jar。假设在一些机器中,A.jar和B.jar中是否存在Test.class,在一些机器中从A.jar加载Test.class,它将从B.jar加载,基于首先列出的jar(JAVA API)文档说明了listFiles()方法不保证任何特定的上市顺序。)

假设两者都是A.jar&amp; B.jar存在于tomcat $ CATALINA_HOME / lib目录中,jar tomcat将从该目录加载Test.class。

我需要解释tomcat如何在这个特定场景中从jar文件加载类。

提前致谢。

2 个答案:

答案 0 :(得分:2)

它的java本机调用。

所以我们无法控制它。

所以你在做过程之前使用sort。

您可以编写自己的Comparator进行排序。

答案 1 :(得分:1)