проблема с загрузкой файла JAR, который имеет зависимость от другого файла JAR - PullRequest
1 голос
/ 03 июня 2009

У меня проблема при загрузке файла JAR во время выполнения. Мой hotel.jar загружен, и его метод (makeReservation) вызывается с использованием следующего кода:

File file = new File("c:/ComponentFiles/hotel.jar");
URL jarfile = new URL("jar", "", "file:" + file.getAbsolutePath() + "!/");
URLClassLoader cl = URLClassLoader.newInstance(new URL[]{jarfile});
Class  componentClass = cl.loadClass("HotelPackage.HotelMgt");
Object componentObject = componentClass.newInstance();
Method setMethod = componentClass.getDeclaredMethod("makeReservation", null);
setMethod.invoke(componentObject, null);

Проблема в классе HotelPackage.HotelMgt моего файла JAR, у меня есть переменная класса другого класса (HotelPackage.Hotel), которая находится в другом файле JAR. Я попытался открыть и загрузить другой файл JAR с тем же кодом, что и выше, но я получаю исключение, которое не может найти класс def .: Исключение в потоке "main" java.lang.NoClassDefFoundError: BeanPackage / Hotel

в чем решение?

Ответы [ 2 ]

1 голос
/ 04 июня 2009

Спасибо, но я нашел другое решение, которое действительно работает. Поскольку я знаю целые серии компонентов, которые будут работать друг с другом, я загружаю их все одним экземпляром загрузчика классов (массив URL-адресов). затем сам загрузчик классов управляет зависимостями.

1 голос
/ 03 июня 2009

Вы можете указать зависимости между JAR-файлами, определив свойство Class-Path в файлах манифеста JAR-файлов. Затем JVM автоматически загрузит зависимые JAR-файлы по мере необходимости.

Больше информации здесь: http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html

...