Как загрузить классы из файла JAR во время выполнения? [Дубликат]

1

Я разрабатываю веб-приложение со встроенной компонентной архитектурой (плагинами). Мое требование состоит в том, чтобы добавить новый плагин jar (classes) в приложение без перезапуска приложения, его следует удалить в веб-приложении lib или в каталоге плагина, и приложение сможет его поднять.

Я пробовал это с сервером tomcat, но он не смог загрузить файл jar, упавший в его каталог lib после его запуска.

Может ли кто-нибудь предложить лучший способ сделать это?

  • 1
    Для этого лучше использовать OSGI. Он способен загружать и выгружать Jars / Packages / Classes из вашего classpath во время выполнения. Вы даже можете определить их в репозитории, где их можно искать и загружать, без необходимости знать их имена.
  • 0
    Я как раз собирался добавить этот указатель тоже. Основной аргумент: вы не хотите изобретать, внедрять и поддерживать еще одну компонентную платформу, когда есть такая, которая прибила все это, если это не для академических развлечений. Но даже тогда я считаю эту проблему очень хорошо решаемой в OSGI.
Теги:
tomcat
java-ee
jboss

1 ответ

0

ваша попытка хорошая, что бы вы ни пытались сделать, может помочь вам под кодом ниже

URL urls [] = {};

JarFileLoader cl = new JarFileLoader (urls);

cl.addFile ("/opt/mysql-connector-java-5.0.4/mysql-connector-java-5.0.4-bin.jar");

System.out.println ("attempt...");

cl.loadClass ("org.gjt.mm.mysql.Driver");

System.out.println ("Success!");

Я надеюсь, что это поможет вам

JVM ищет и загружает классы в следующем порядке:

Bootstrap классы, которые являются классами, которые составляют платформу Java, включая классы в rt.jar и несколько других важных файлов JAR.

Классы расширения, которые используют механизм расширения Java. Эти классы поставляются в виде файлов JAR и находятся в каталоге расширений.

Классы пользователей - это классы, определенные разработчиками и третьими лицами и не использующие механизм расширения.

  • 0
    Спасибо Сантошу, но в моем случае я не смогу упомянуть имя jarfile или даже имя класса, потому что во время выполнения это может быть что угодно, что я делаю, аннотирую каждый класс плагина аннотацией @Plugin, и это единственное, что мой логика сканирования плагинов работает вокруг. Что я могу сделать, это запустить эту логику сканирования плагина через регулярные промежутки времени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню