Есть ли способ проверить, есть ли у класса метод main? - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь получить список всех классов в проекте на Java, и я хотел бы определить класс, в котором расположен метод main Есть ли способ определить, что класс реализует метод main, не обращая внимания на код самого класса?

Я реализовал следующее, но возвращаемое значение всегда ложно. Кто-нибудь знает, почему это происходит?

Class<?> c = "edu.tool.parsing.A".getClass();
        boolean hasMain = true;

            try {
                c.getMethod("main", String[].class);
                hasMain=true;
            } catch (SecurityException e) {
                 hasMain = true;
            } catch (NoSuchMethodException e) {
                hasMain=false;
            }

Ответы [ 4 ]

8 голосов
/ 01 марта 2012

Программно:

Class.getClass("com.mycompany.MyClass").getMethod("main", String[].class)

Или же вы можете использовать утилиту командной строки javap, которую можно найти в каталоге bin JDK.

3 голосов
/ 01 марта 2012

Если у вас есть имя класса, вы можете попытаться отразить метод main.

Тривиальный (неполный) подход:

private static hasMainMethod(Class<?> clazz) throws Exception {
  Method[] methods = clazz.getMethods();
  for (Mehthod method:methods) {
    if (method.getName().equals("main") {
      // Now we have to verify the method signature!
      return true;
    }
  }
  return false;
}
0 голосов
/ 01 марта 2012

Может быть более одного такого класса. Там могут быть десятки. Почему вы не знаете точку входа заранее? Возможно, вам лучше взглянуть на запись главного класса в JAR Manifest.

0 голосов
/ 01 марта 2012

Загрузите ваш проект в IDE (я работал с IDEA), затем добавьте локальный прогон, IDEA перечислит все классы с помощью метода main.

Если у вас нет источников и есть только файлы jar, это нормально, просто добавьте файлы jar в виде библиотеки проекта, а затем создайте RUN.

...