如何通过命令行查看本地JVM模块内的资源文件内容
命令行查看JVM内置模块资源文件的方法
JDK 9及以上版本采用自定义JImage格式存储所有Java模块内容,你看到的lib/modules就是JImage格式的模块化镜像,不属于zip/7z等通用归档格式,普通压缩工具无法打开,直接用JDK自带的工具即可查看目标文件:
方法1:一行命令直接打印文件内容(无需落盘提取)
直接调用JDK内置的jshell工具,通过JDK内置的JRT虚拟文件系统读取目标文件,执行完直接在终端输出内容:
# Linux/macOS/Windows 通用命令,直接在终端执行即可 jshell -e "Files.newInputStream(Path.of(\"/modules/java.base/sun/net/www/content-types.properties\")).transferTo(System.out);System.exit(0);"
执行后终端会直接打印content-types.properties的全部内容,不会在本地生成多余文件。
方法2:提取文件到本地后查看
如果需要把文件保存到本地再查看,可以用JDK自带的jimage工具操作:
- 第一步:先验证目标文件路径是否存在
- Linux/macOS执行:
jimage list $JAVA_HOME/lib/modules | grep content-types.properties - Windows cmd执行:
jimage list %JAVA_HOME%\lib\modules | findstr content-types.properties
正常输出会确认该文件位于java.base模块下,路径与你要查找的/sun/net/www/content-types.properties一致。
- Linux/macOS执行:
- 第二步:提取目标文件到指定目录
- Linux/macOS执行:
jimage extract --dir /tmp/jdk_res $JAVA_HOME/lib/modules --include ".*/sun/net/www/content-types.properties" - Windows cmd执行:
jimage extract --dir C:\temp\jdk_res %JAVA_HOME%\lib\modules --include ".*/sun/net/www/content-types.properties"
执行完成后,进入你指定的提取目录,顺着java.base/sun/net/www/路径就能找到content-types.properties文件,直接用任意文本编辑器打开即可。
- Linux/macOS执行:
注意事项
- 上述用到的
jshell、jimage均为JDK自带工具,存放在JDK安装目录的bin文件夹下,执行前请确保已将JDK的bin目录加入系统PATH环境变量,否则需要写全工具的绝对路径调用。 - 不要尝试用通用压缩软件解析
lib/modules文件,该格式为JDK专属,做了类字节码共享、存储压缩优化,没有第三方工具的适配支持无法正常读取。
内容的提问来源于stack exchange,提问作者SpaceTrucker
相关产品推荐
相关产品推荐

