【问题标题】:Get manifest-file from executed JAR从执行的 JAR 中获取清单文件
【发布时间】:2011-01-14 17:49:26
【问题描述】:

假设我有:
核心.jar
client.jar(包含主方法)(使用 core.jar)
super_mega_client.jar (使用 core.jar, client.jar)

要运行我的程序,我使用“java -jar super_mega_client.jar”
我如何从“super_mega_client.jar”中获取清单文件,对它的名称和内容一无所知?
实际上,我需要在 core.jar 中创建一个实用程序,它将与 jar 一起使用,使用“java -jar ***.jar”执行


好的,这是正确的问题:
我有 ma​​in.jar 和 main-method(可以在 my.app.Main 类中说)
我也有 fisrt.jar(带有一些类和资源)和 second.jar(带有一些其他类和资源)。两者都没有主类,在 CLASSPATH 中都有“ma​​in.jar”,都有定义为“my.app.Main”的 Main-Class 属性。
我可以通过执行“java -jar first.jar”或“java -jar second.jar”来运行我的应用程序
在我的my.app.Main.main(String[] args) 方法中(包含在 ma​​in.jar 中)我想知道执行的 jar 的名称(我想获得“first.jar”或“ second.jar")
我该怎么办?

【问题讨论】:

  • this问题。
  • 我既不知道 jar-name,也不知道任何类名。我只知道“java -jar *.jar”命令中使用了jar。
  • +1。使用引用的答案,您可以搜索每个潜在 JAR 的清单,例如find /path/to/jars -name '*jar' | xargs manifest

标签: java jar manifest


【解决方案1】:

在任何声明其主类的jar中,位置和名称均由标准固定为META-INF/MANIFEST.MF

您可以使用 Java SDK 附带的 jar 命令检索清单文件(您可以从该命令运行的任何 zip 工具也可能足够),方法是运行:

jar -xvf anyjar.jar META-INF/MANIFEST.MF

这将创建 META-INF 目录并将清单文件放入其中。如果您想要较少详细的输出,可以省略 -v。

【讨论】:

    【解决方案2】:

    不太确定我是否了解您在这里需要什么,但请查看这篇文章(例如)

    http://java.sun.com/j2se/1.5.0/docs/guide/lang/resources.html

    您要求 CLASSLOADER(所以使用您已经加载的类并请求它使用的类加载器可能足够好)为您加载资源。

    【讨论】:

      【解决方案3】:

      您可以使用java 命令的-verbose 选项查看所有已加载类的名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-14
        • 2013-09-09
        • 2015-07-28
        • 2011-03-20
        • 2015-06-01
        • 1970-01-01
        • 2021-11-02
        相关资源
        最近更新 更多