有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java以编程方式访问清单。主类MF

在不知道主类的名称的情况下,这是可能的吗?特别是我想要在应用程序启动时通过信息电子邮件发送实现版本属性。我所知道的访问该文件的唯一方法是知道我想要访问其信息的包或jar文件的名称;我不知道如何通过寻找主类来实现这一点


共 (2) 个答案

  1. # 1 楼答案

    来自@Lee Meador的评论为查找您的清单提供了很好的提示。您不需要知道jar名称,只需要能够识别您的清单。建议:使用其他实现属性的任意组合来标识正确的清单。如果您已经在设置IMPLEMENTATION\u VERSION,为什么不同时设置IMPLEMENTATION\u名称以便可以找到它呢。一旦你得到了它,你可以通过查看条目找到你想要的。{a1}使它更容易:

                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);
            }
    
  2. # 2 楼答案

    所以你想知道主类,但不想知道它的名字是什么

    为了找到你要找的东西,你需要:

    1. 确定主类(抱歉,这是一项要求)
    2. 找出该类的加载位置
    3. 如果是JAR文件,则从该JAR文件加载清单

    步骤1可能很困难:启动主类的线程可能已经完成。例如,许多GUI程序将执行Class.main(String[])方法,然后在AWT线程保持进程活动时终止。您可能根本无法识别主类。如果是这样的话,你可能就不走运了。您可以尝试sun.java.command系统属性,但这可能仅在Sun/Oracle JVM上有效

    第2步相当简单:获取ClassClassLoader,然后询问。类文件本身

    步骤3也相当简单:打开JAR文件并查找META-INF/MANIFEST.MF文件