这是否可能在不知道主类名称的情况下?特别是我在应用程序启动时在信息电子邮件中发送的Implementation Version属性之后。我知道访问它的唯一方法是需要知道我想要访问其信息的jar文件包或名称;我不知道如何通过寻找主类来做到这一点。
答案 0 :(得分:1)
来自@Lee Meador的评论指出了找到你的清单的良好提示。您不需要知道jar名称,只需要能够识别清单。建议:使用其他IMPLEMENTATION_ *属性的任意组合来标识正确的清单。如果您已经设置了IMPLEMENTATION_VERSION,为什么不设置IMPLEMENTATION_NAME以便您可以找到它。一旦你得到它,你可以查看条目,找到你想要的。 Manifest API让它变得更加容易:
Attributes mainAtts = mf.getMainAttributes();
if(mainAtts.containsKey(Attributes.Name.MAIN_CLASS)){
String mainClass = mainAtts.getValue(Attributes.Name.MAIN_CLASS);
System.out.println(mainClass);
String mainVer = mainAtts.getValue(Attributes.Name.IMPLEMENTATION_VERSION);
System.out.println(mainVer);
}
答案 1 :(得分:0)
所以你想知道主要课程,但不想知道它的名字是什么?
为了找到您要找的内容,您需要:
步骤1可能很困难:启动主类的线程可能已经完成 - 例如,许多GUI程序将执行Class.main(String[])
方法,然后在AWT线程使进程保持活动状态时终止。您可能根本无法识别主类。如果是这样的话,你可能运气不好。您可以尝试sun.java.command
系统属性,但这可能仅在Sun / Oracle JVM上有效。
第2步非常简单:获取Class
的{{1}},然后询问.class文件本身的网址。
步骤3也相当简单:打开JAR文件并查找ClassLoader
文件。