Задать вопрос
@frankwolf

Как создать простое pluggable приложение Java + Maven?

Я решил сделать для своего desktop-приложения на Java возможность его расширения за счет плагинов. Суть загрузки плагинов такова: приложение ищет в определенной директории jar-файл плагина и его дескриптор, описывающий название, версию, главный класс и т.д., с помощью URLClassLoader данный плагин загружается в приложение. При этом у плагина и у приложения должно быть подключено API, которое служит для взаимодействия плагина и приложения.

Я реализовал это и приступил к тестированию. При этом приложение, плагин к нему, API используют Maven

API подключается к приложению и плагину данным образом:
<dependency>
		<groupId>название</groupId>
		<artifactId>название api</artifactId>
		<version>версия api</version>
		<scope>system</scope>
		<systemPath>${basedir}/api.jar</systemPath>
	</dependency>


В приложение я загружаю плагин так:
loader = new URLClassLoader(new URL[] {info.getPluginJar().toURI().toURL()}, ClassLoader.getSystemClassLoader());
plugin = (Plugin) loader.loadClass(info.getMainClass()).newInstance();


Но при запуске возникает ошибка:
Exception in thread "main" java.lang.NoClassDefFoundError: название/пакет_api/PluginContext
Caused by: java.lang.ClassNotFoundException: название.пакет_api.PluginContext
Я так понял, что приложение не видит классы API, которые используются внутри плагина. И как быть в данной ситуации, я не знаю.
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 1
@frankwolf Автор вопроса
Решение: Не использовать подключение API данным способом

<dependency>
    <groupId>название</groupId>
    <artifactId>название api</artifactId>
    <version>версия api</version>
    <scope>system</scope>
    <systemPath>${basedir}/api.jar</systemPath>
  </dependency>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы