2014-12-17 2 views
1

У меня есть каталог с файлами jar. В некоторых классах доступно несколько файлов jar.Пояснение, требуемое для Classloader

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() перечисляет банки в другом порядке, при выполнении приведенного выше кода в разных машинах. Предположим, что Test.class присутствует в A.jar и B.jar на некоторых машинах. Test.class загружается из A.jar на некоторых машинах, он получает загруженную форму B.jar, на основе которой jar указан первым (JAVA API document say listFiles() метод не гарантирует какой-либо конкретный заказ на листинг).

Предположим, что оба A.jar & B.jar присутствует в каталоге tomcat $ CATALINA_HOME/lib, из которого jar tomcat будет загружать Test.class.

Мне нужно объяснение того, как tomcat загружает классы из файлов jar в этом конкретном сценарии.

Заранее спасибо.

ответ

2

Его родной звонок java.

Таким образом, у нас нет контроля над этим.

Таким образом, вы используете сортировку перед выполнением процесса.

Вы можете написать свой собственный Comparator, чтобы отсортировать его.

+0

Спасибо за ваш ответ. Я пытаюсь воспроизвести поведение загрузчика класса tomcat. Я хочу знать, делает ли tomcat какую-либо подобную сортировку, если да, то как они сортируют ее (в алфавитном порядке или сортируя ее, используя некоторые другие параметры)? – Cheran

Смежные вопросы