以编程方式访问主类的MANIFEST.MF

时间:2012-12-28 16:15:20

标签: java jar manifest

这是否可能在不知道主类名称的情况下?特别是我在应用程序启动时在信息电子邮件中发送的Implementation Version属性之后。我知道访问它的唯一方法是需要知道我想要访问其信息的jar文件包或名称;我不知道如何通过寻找主类来做到这一点。

2 个答案:

答案 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. 确定主要课程(抱歉,这是一项要求)
  2. 找出该课程的加载位置
  3. 如果是JAR文件,请从该JAR文件加载清单
  4. 步骤1可能很困难:启动主类的线程可能已经完成 - 例如,许多GUI程序将执行Class.main(String[])方法,然后在AWT线程使进程保持活动状态时终止。您可能根本无法识别主类。如果是这样的话,你可能运气不好。您可以尝试sun.java.command系统属性,但这可能仅在Sun / Oracle JVM上有效。

    第2步非常简单:获取Class的{​​{1}},然后询问.class文件本身的网址。

    步骤3也相当简单:打开JAR文件并查找ClassLoader文件。