URLClassLoader генерирует исключение ClassNotFoundException при попытке загрузить внешние библиотеки - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь загрузить внешние библиотеки, когда создаю другой jar-файл, который использует эти библиотеки (в результате чего ASM выдает исключение ClassNotFoundException, поскольку они не загружены.)

Я не слишком уверенкак это сделать, так как я не смог найти никакой помощи в Интернете по этому вопросу.

Мой код для загрузки библиотек можно увидеть ниже:

        for (String path : visitor.currentBlock()) {
            if (!path.endsWith(".jar")) {
                continue;
            }

            ClassLoader classLoader = URLClassLoader.newInstance(new URL[]{file.toURI().toURL()}, getClass().getClassLoader());
            JarInputStream jis = new JarInputStream(new FileInputStream(path));

            JarEntry entry;
            while ((entry = jis.getNextJarEntry()) != null) {
                try {
                    if (entry.getName().endsWith(".class")) {
                        classLoader.loadClass(entry.getName());
                    }
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }

            jis.close();
        }

Каждый класс выбрасывает этоисключение:

java.lang.ClassNotFoundException: XXX
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
at java.base/java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:890)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
at enterprises.yosemite.obfuscator.obfuscating.configuration.SimpleConfiguration.load(SimpleConfiguration.java:81)
at enterprises.yosemite.obfuscator.Bootstrap.init(Bootstrap.java:30)
at enterprises.yosemite.obfuscator.gui.Frame.main(Frame.java:24)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at 
java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
...