我正在尝试用Java获取项目中所有类的列表,我想确定主方法所在的类。有没有一种方法可以识别类正在实现主方法,而无需实际查看类本身的代码?
我已经实现了以下内容,但返回值总是为false。有人知道为什么会发生这种事吗?
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;
}
编程:
Class.getClass("com.mycompany.MyClass").getMethod("main", String[].class)
或者,您可以使用命令行实用程序javap
,它可以在JDK bin目录中找到。
如果您有类名,那么您可以尝试反映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;
}
这样的类可能不止一个。可能有几十个。你为什么不提前知道切入点?您最好查看JAR清单中的Main Class条目。
将您的项目加载到IDE中(我曾使用过IDEA),然后添加一个本地运行,IDEA会用main方法列出所有类。
如果你没有源代码,只有jar文件,那没关系,只需将jar文件添加为项目的库,然后创建一个RUN。