gpt4 book ai didi

python - 如何可靠地定位 Java 的 rt.jar 或等效文件?

转载 作者:太空狗 更新时间:2023-10-30 01:02:51 25 4
gpt4 key购买 nike

如何可靠地找到包含 Java Bootstrap 类(rt.jar 或等效文件)的 jar?我正在使用下面的代码,但我发现 JAVA_HOME 用于引用 JDK,而不是 JRE,如果没有安装 JDK,它将完全失败。

def findJRE():
try:
home = os.environ['JAVA_HOME']
path = os.path.join(home, 'jre', 'lib', 'rt.jar')
if os.path.isfile(path):
return path

#For macs
path = os.path.join(home, 'bundle', 'Classes', 'classes.jar')
if os.path.isfile(path):
return path
except Exception as e:
pass

最佳答案

由于文件的位置和名称因平台而异,而且似乎没有指向它的环境变量,我想你最好的选择是在文件系统中查找文件:

#!/usr/bin/env python
import subprocess
import re

rtjarPaths = subprocess.check_output(["locate", "rt.jar"])
paths = re.findall('^.*/jre/.*$', rtjarPaths, re.M)
print paths

vicent@deckard:~$ python findrt.py
['/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar']

上面的代码在我的 Ubuntu 机器上运行良好。它也可以很容易地扩展以在 MacOS X 上工作。其他 Linux 发行版可能也需要调整代码。

更新:经过一番谷歌搜索后,我找到了 in the oracle documentation rt.jar 文件位于 sun.boot.class.path 系统属性中存储的路径中。不幸的是,我不知道如何直接从 Python 或命令行获取此属性,因此我只能提供以下代码来替代之前的代码。

创建并编译 PropertiesTest.java:

public class PropertiesTest {
public static void main(String[] args)
throws Exception {
String value = System.getProperty("sun.boot.class.path");
System.out.println(value);
}
}

然后执行以下Python脚本:

#!/usr/bin/env python
import subprocess
import re

jrePaths = subprocess.check_output(["java", "PropertiesTest"])
rt = re.findall('(?:.*:)?(.*/(?:rt|classes)\.jar):?', jrePaths)
print rt

应该可以在 Linux 和 MacOS X 平台上运行。在我的 Ubuntu 系统上它给出了输出

['/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar']

关于python - 如何可靠地定位 Java 的 rt.jar 或等效文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12985814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com