定位Java标准库

6
什么是查找包含核心Java类(例如java.lang.Object)的jar文件的最佳方法?我一直在使用JAVA_HOME,但事实证明只有JDK安装后才能使用。如果我想找到仅在命令行中运行java时使用的标准库位置,该怎么办?
另外,我需要从Python脚本中完成此操作,请不要使用Java库来回应。
4个回答

2
当你从Oracle的JVM启动java时,它会将sun.boot.class.path属性设置为指向rt.jar,其中通常包含所有java.lang内容。
你可以启动一个简单的Java程序,检索System.getProperty("sun.boot.class.path")并查看这个文件应该在哪里。更多信息请参见此处
如果你的环境正确(已设置JAVA_HOME等),上述方式应该可以正常工作。否则,我恐怕你会遇到鸡生蛋的问题;-)

虽然这是一种不错且有创意的方法,但 sun.boot.class.path 属性仅存在于 Sun 的 JVM 实现中。 - FThompson
我希望避免需要运行一个单独的程序。 - Antimony

1

由于没有明确限制放置内部类的位置,因此您应该尝试处理所有可能的(或尽可能多的)位置。

首先,您肯定应该在 PATH 中查找 java。不幸的是,有时会失败,例如,您经常可以在 C:\Windows\System32 中找到 java.exe。幸运的是,在 Windows 的情况下,您可以使用注册表获取已安装 JRE 的列表。

如果您找到了一些可能包含基本类的 jar 包,您可以使用 zipjar 来检查是否存在 java/lang/Object.class


可以简单地使用JAVA_HOME找到JRE。问题在于通常没有安装一个。 - Antimony

0
如果您正在使用Linux,可以使用shell命令:“type java”并解析输出。

0

Python应该有找到"java"或"java.exe"可执行文件位置的方法。跟随所有符号链接以揭示真实位置。我的Python已经生疏了,但我认为shutil.whichos.path.realpath可以完成这项工作。

核心类将在相对于Java可执行文件的../lib/rt.jar中。


2
除非特别说明,否则通常情况下它们是这样的,例如在使用“Classes.jar”的Mac OS上的Apple JDK中。 - Ian Roberts
shutil.which看起来很不错,但它仅适用于3.3版本。 - Antimony
我错了,Ian是对的:假设rt.jar存在于所有平台上都不起作用。 - VGR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接