这可能不知道主类的名称?具体来说,我是在应用程序启动时通过信息电子邮件发送的Implementation版本属性之后。我知道访问这个的唯一方法是需要知道我想访问的信息的jar文件的名称或包名;我不知道怎么做,只是通过寻找主要的课程。以编程方式访问主类的MANIFEST.MF
2
A
回答
0
所以你想知道主类,但不想知道它的名字是什么?
为了找到你要找的内容,您需要:
- 确定主类(不好意思,这将是一个要求)
- 找出这个类加载
- 如果它是一个JAR文件,从JAR文件中加载清单
第1步可能是困难的:在发起主类的线程可能已经完成 - 例如,许多GUI程序将执行Class.main(String[])
方法,然后在AWT线程使进程保持活动状态时终止。你可能根本无法确定主要课程。如果是这样的话,你可能倒霉。您可以尝试使用sun.java.command
系统属性,但这可能仅在Sun/Oracle JVM上有效。
第2步相当简单:获取Class
的ClassLoader
,然后询问.class文件本身的URL。
步骤3也很简单:打开JAR文件并查找META-INF/MANIFEST.MF
文件。
1
来自@Lee Meador的评论指出了寻找您的Manifest的很好的提示。你不需要知道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. 可以以编程方式访问MANIFEST.MF中定义的值吗?
- 2. 以编程方式访问Android中的主题/样式/ attrs
- 3. 如何以编程方式访问的主界面
- 4. 以编程方式更改主体类
- 5. 以编程方式访问iSight?
- 6. 以编程方式访问Manifest.permission?
- 7. 以编程方式访问Access Gateway
- 8. 以编程方式访问Raphael路径
- 9. 如何以编程方式访问ItemPanel?
- 10. wp7以编程方式访问SIM卡
- 11. 以编程方式访问Infinispan MBeans
- 12. 以编程方式访问TFS历史
- 13. 以编程方式访问ResourceDictionary项目
- 14. 以编程方式访问字典键
- 15. 以编程方式访问iTunes商店?
- 16. 以编程方式访问WPF控件
- 17. 以编程方式访问QFiledialog
- 18. 无法以编程方式访问dijit.Dialog
- 19. 如何以编程方式访问iptables?
- 20. 以编程方式访问iPod库
- 21. 以编程方式访问UniformGrid ItemTemplate
- 22. 以编程方式访问iMessages
- 23. 以编程方式访问Jenkins URL?
- 24. 以编程方式访问.NET API
- 25. 以编程方式访问PhotoStream
- 26. 如何以编程方式访问{{form.my_field.id_for_label}}?
- 27. 以编程方式访问saltstack minion
- 28. 以编程方式访问rowlistview
- 29. 以编程方式访问Apple App Store
- 30. 以编程方式访问httpRuntime maxRequestLength
请看:[http://stackoverflow.com/questions/1272648/reading-my-own-jars-manifest][1] [1 ]:http://stackoverflow.com/questions/1272648/reading-my-own-jars-manifest –
@LeeMeador这些答案都假设知道主类的名称。 – djechlin
从你的问题中不清楚你的背景 - 如果你没有jar文件名*和*你没有包名/类名,你需要告诉我们我们的信息必须从中工作。这是一个命令行实用程序,还是应用程序服务器上下文中的某些东西等等。您是否试图查找当前正在运行的类的清单属性? – Gus