从执行的 JAR 中获取清单文件

发布于 2024-08-20 22:44:51 字数 860 浏览 5 评论 0原文

假设我有:
核心.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 中创建一个 util,它将与 jar 一起使用,用“java -jar ***.jar”执行


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

Let's say I have:
core.jar
client.jar (contains main-method) (uses core.jar)
super_mega_client.jar (uses core.jar, client.jar)

To run my program I use "java -jar super_mega_client.jar"
How could I get the manifest-file from "super_mega_client.jar" knowing nothing about it's name and content?
Actualy I need to create an util in core.jar which will work with the jar, executed with "java -jar ***.jar"


OK, here is proper question:
I have main.jar with main-method (lets say in my.app.Main class)
I also have fisrt.jar(with some classes and resources) and second.jar (with some other classes and resources). Both have no main-classes, both have "main.jar" in CLASSPATH, both have Main-Class property defined as "my.app.Main".
I can run my app by executing "java -jar first.jar" or "java -jar second.jar"
In my my.app.Main.main(String[] args) method (contained in main.jar) I want to know the name of the executed jar (I want to get either "first.jar" or "second.jar")
How could I do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一指流沙 2024-08-27 22:44:51

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

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

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

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

In any jar that declares its main class, the location and name is fixed by the standard to META-INF/MANIFEST.MF

You can retrieve the manifest file using the jar command that comes with the Java SDK (any zip tool that you can run from the command might suffice too) by running:

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

this will create the META-INF directory and put the manifest file in it. You can leave out the -v if you want less verbose output.

孤独患者 2024-08-27 22:44:51

不太确定我明白你在这里需要什么,但请查看这篇文章(例如)

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

您询问 CLASSLOADER (因此使用您已经加载的类并请求它使用的类加载器可能足够好)来为您加载资源。

Not quite sure I understand what you need here, but check out this article (for instance)

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

You ask the CLASSLOADER (so use a class you have loaded already and request what classloader it used is probably good enough) to load the resource for you.

Hello爱情风 2024-08-27 22:44:51

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

You can use the -verbose option of the java command to see the names of all loaded classes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文