Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Pluggable приложение. Не могу загрузить класс. 
V
    Опции темы
panukov
Дата 23.6.2010, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2009
Где: Омск

Репутация: нет
Всего: нет



Делаю на основе http://voituk.kiev.ua/2008/01/14/java-plugins/

Написан интерфейс, простой, для понимания процесса:

Код

public interface Plugin_Interface{
    public void invoke();
}


Далее два класса-плагина

Код

public class Plugin implements Plugin_Interface{
    public void invoke() {
        System.out.println("I'm plugin A");
    }
}



и

Код

public class Plugin implements Plugin_Interface{
    public void invoke() {
        System.out.println("I'm plugin B");
    }
}



Далее пытаюсь загрузить оба плагина:
Код

import java.io.*;
import java.net.*;

public class Loader{
    public static void main(String argv[]){
        File pluginDir = new File("plugins");
        File[] jars = pluginDir.listFiles(
            new FileFilter() {
                public boolean accept(File file) {
                    return file.isFile() && file.getName().endsWith(".jar");
                }
            }
        );
        System.out.println(jars.length);

        Class[] pluginClasses = new Class[jars.length];

        for (int i = 0; i < jars.length; i++) {
            try {
                URL jarURL = jars[i].toURI().toURL();
                URLClassLoader classLoader = new URLClassLoader(new URL[]{jarURL});
                pluginClasses[i] = classLoader.loadClass("com.plugins.PluginA");

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}


Сборка интерфейса, плагинов, класса Loader происходит без ошибок. Когда начинаю выполнять Loader, вылетает ошибка:
Код

C:\Projects\pluggable>java Loader
2
java.lang.ClassNotFoundException: com.plugins.PluginA
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at Loader.main(Loader.java:22)
java.lang.ClassNotFoundException: com.plugins.PluginA
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at Loader.main(Loader.java:22)


или так:
Код

C:\Projects\pluggable>java -cp ..\Plugin_interface Loader
Exception in thread "main" java.lang.NoClassDefFoundError: Loader



структура каталогов:
Код

Progects->pluggable ->Loader.java
Progects->pluggable ->Loader.class
Progects->pluggable ->plugins->PluginA.jar
Progects->pluggable ->plugins->PluginB.jar
Progects->Plugin_interface->Plugin_Interface.java
Progects->Plugin_interface->Plugin_Interface.class


PM MAIL   Вверх
Kircul
Дата 23.6.2010, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



Гугл все еще неплохо работает. Почитай тут.
PM   Вверх
COVD
Дата 23.6.2010, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



PM MAIL   Вверх
panukov
Дата 23.6.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 8.4.2009
Где: Омск

Репутация: нет
Всего: нет



Всем спасибо. Разобрался. Неверно был указан classname.
Насчет OSGi - отдельное спасибо. Буду изучать.
Если кто будет искать - вот рабочий код:

Код

import java.io.*;
import java.net.*;
import java.lang.ClassLoader; 
import java.lang.reflect.Method;

public class Loader{
    public static void main(String argv[]){
        File pluginDir = new File("plugins");
        File[] jars = pluginDir.listFiles(
            new FileFilter() {
                public boolean accept(File file) {
                    return file.isFile() && file.getName().endsWith(".jar");
                }
            }
        ); //Получили список jar - плагинов

        for (int i = 0; i < jars.length; i++) {
            try {
                URL jarURL = jars[i].toURI().toURL();
                //для каждого плагина создаем свой загрузчик
                URLClassLoader classLoader = new URLClassLoader(new URL[]{jarURL});
                //загружаем класс
                Class c = classLoader.loadClass("Plugin");
                //у метода класса нет аргументов, след-о, types и margs - пустые
                Class[] types = {};
                //получаем метод public void invoke()
                Method useValue = c.getDeclaredMethod("invoke", types);
                Object[] margs = {};
                //создаем экземпляр класса
                Object ctx0 = c.newInstance();
                //выполняем метод
                useValue.invoke(ctx0, margs);
            } catch (MalformedURLException e) {

                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}


Это сообщение отредактировал(а) panukov - 24.6.2010, 07:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.