Я реализовал простое приложение с плагинами с Java. Основной класс плагина получен из и абстрактного класса под названием «Плагин». Приложение читает этот класс из JAR-файла и запускает плагин, создавая экземпляр класса. Стандартная процедура, я думаю :)URLClassLoader не читает внешнюю JAR-библиотеку плагина
Все вилки до сих пор. Но проблема возникает, когда я включаю библиотеку в свой плагин, например, MySQL Connector. Исключение NoClassDefFoundError и ClassNotFoundException выводятся после выполнения. Я преодолеваю проблему, добавив библиотеку соединителей MySQL в основное приложение, но в чем же смысл? :)
Я не эксперт Java, так что я не уверен в каких-либо альтернативных решений, как определяющий путь к классам для библиотек и т.д.
Вот мой загрузчик плагинов: http://pastebin.com/90rQ9NfJ
А вот мой плагин базовый класс: http://pastebin.com/Juuicwkm
Я исполнение из графического интерфейса:
private void jButtonAddActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("JTask Plugin (*.JAR)", "JAR"));
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
File pluginFile = fileChooser.getSelectedFile();
PluginLoader pluginLoader = new PluginLoader();
Plugin plugin = pluginLoader.loadPlugin(pluginFile);
if (plugin != null)
jPanelPlugins.add(new PluginControl(jPanelPlugins, plugin));
}
}
спасибо. Я нашел что-то об обновлении манифеста в файле jar http://java.sun.com/developer/Books/javaprogramming/JAR/basics/update.html, но он все еще выглядит слишком подробно. Я ищу что-то, что не нужно менять основное приложение снаружи. – Heka