Java: получить класс из внешнего .jar - PullRequest
1 голос
/ 27 марта 2012

У меня проблема с получением класса из внешнего файла .jar.Я нашел этот метод загрузки внешнего .jar здесь, но всякий раз, когда я запускаю его, я получаю ClassNotFoundException.Ниже приведен код, который я использую, а здесь - это .jar, с которым я тестирую.Если у кого-то есть идеи, как это исправить, пожалуйста, скажите мне.Спасибо!

Вот мой код:

@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
public void loadJar() throws MalformedURLException {
    URL[] classes = {new URL("jar:file://test.jar!/")};
    URLClassLoader child = new URLClassLoader (classes, this.getClass().getClassLoader());
    try {
        Class classToLoad = Class.forName ("test.PackageTest", true, child);
        Method method = classToLoad.getDeclaredMethod ("test");
        Object instance = classToLoad.newInstance();
        Object result = method.invoke(instance);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Попробуйте разбить URL[] classes = {new URL("jar:file://test.jar!/")}; на несколько операторов

File myFile = new File("test.jar");
URL myJarFileURL = new URL("jar", "", "file:" + myFile.getAbsolutePath() + "!/");
URL[] classes = {myJarFileURL};

Вы можете отправить myFile.getAbsolutePath () в логгер или консоль и посмотреть, где загрузчик классов ожидает найти test.jar. Затем убедитесь, что test.jar находится в этом месте.

1 голос
/ 27 марта 2012

Попробуйте без jar: и! / В URL.

...