NoSuchMethodException при попытке вызвать основной метод с помощью Reflection - PullRequest
0 голосов
/ 05 ноября 2019

Я загружаю классы файла Jar ... теперь я хочу вызвать метод Main. Я нашел метод, но при вызове invoke он говорит: NoSuchMethodException.

Вот мой код:

@SpringBootApplication
public class Uebung2Application {

    public static void main(String[] args) {
        SpringApplication.run(Uebung2Application.class, args);
    }

    @PostConstruct
    public void start() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        try {
            String pathToJar = "test.jar";

            JarFile jarFile = new JarFile(pathToJar);
            Enumeration<JarEntry> e = jarFile.entries();

            URL[] urls = { new URL("jar:file:" + pathToJar+"!/") };
            URLClassLoader cl = URLClassLoader.newInstance(urls);

            while (e.hasMoreElements()) {
                JarEntry je = e.nextElement();
                if(je.isDirectory() || !je.getName().endsWith(".class")){
                    continue;
                }
                // -6 because of .class
                String className = je.getName().substring(0,je.getName().length()-6);
                className = className.replace('/', '.');
                Class c = cl.loadClass(className);

                Arrays.asList(c.getMethods()).forEach(m -> 
                    System.out.println(m.toString()));

                if(Arrays.asList(c.getMethods()).stream().anyMatch(m -> m.getName().equals("main"))) {
                    System.out.println(className);


                    c.getDeclaredMethod("main").invoke(null, new String[] {"1", "2"});
                }
            }
        }catch (IOException e1) {
            e1.printStackTrace();
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (SecurityException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (NoSuchMethodException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...