当前位置: 首页 > 知识库问答 >
问题:

如何从命令行检查jvm模块内容?

仲和韵
2023-03-14

我想从命令行检查本地安装的jvm的java模块的资源文件的内容。

基于一个关于jvm中mime类型支持的问题,我想了解一下内容类型。模块java中的属性。我在本地安装的jvm的基础。

然而,当滚动为jvm安装的文件时,我找不到一个名为likejava的文件。基础* 。然而,我看到一个文件/库/模块的大小超过130 MB。我怀疑这个文件包含模块java的内容。基础。但是7-zip无法将此文件作为存档打开。

如何查看内容类型。模块java中的属性。使用命令行在本地安装的jvm的基础上?

共有2个答案

吴高远
2023-03-14

我不知道有什么命令行工具可以用于此,尽管这并不意味着没有命令行工具。但是,您可以编写一个快速实用程序,用不到20行代码获得资源的内容。

请注意,当前实现的所有三种方法都从正在执行程序的JDK中读取资源。此外,您显然可以修改任一方法的代码以更好地满足您的需求。也许通过使它们更“动态”(例如,接受命令行参数)。

一种选择是使用资源API:

import java.io.IOException;

public class Main {

  public static void main(String[] args) throws IOException {
    var name = "/sun/net/www/content-types.properties";
    try (var in = Object.class.getResourceAsStream(name)) {
      // Thanks to Holger for the code simplification
      in.transferTo(System.out);
    }
  }
}

注意:正在java中的类上调用getResourceAsStream方法。基本模块

然后,您可以像这样运行上述操作(利用“单源文件”功能):

java --add-opens=java.base/sun.net.www=ALL-UNNAMED Main.java
import java.io.IOException;
import java.lang.module.ModuleFinder;

public class Main {

  // Thanks to Holger for pointing out this approach
  public static void main(String[] args) throws IOException {
    var name = "sun/net/www/content-types.properties";

    var mod = ModuleFinder.ofSystem().find("java.base").orElseThrow();
    try (var reader = mod.open();
         var in = reader.open(name).orElseThrow()) {
      in.transferTo(System.out);
    }
  }
}

使用这种方法,您不需要add opens参数。

第三种选择是使用JRT文件系统并像“文件”一样读取资源:

import java.io.IOException;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {

  public static void main(String[] args) throws IOException {
    var uri = URI.create("jrt:/java.base/sun/net/www/content-types.properties");
    try (var in = Files.newInputStream(Path.of(uri))) {
      // Thanks to Holger for code simplification
      in.transferTo(System.out);
    }
  }
}

使用此选项,您不需要--add opens参数。

郭永怡
2023-03-14

使用jimage工具提取内容类型。来自模块的属性:

jimage extract --dir /tmp --include regex:.*content-types.properties $JAVA_HOME/lib/modules && \
cat /tmp/java.base/sun/net/www/content-types.properties
 类似资料:
  • 问题内容: 我可以从命令行检查正在运行的JVM的堆使用情况,我的意思是实际使用情况,而不是Xmx分配的最大数量。 我需要将其作为命令行,因为我无权访问窗口环境,并且我希望基于该值的脚本,该应用程序正在Jetty应用程序服务器中运行 问题答案: 您可以使用jstat,例如: 完整的文档在这里:http : //docs.oracle.com/javase/7/docs/technotes/tools

  • 上面给出的很多都是nodejs写的小工具模块,nodejs和npm的种种好处,使得nodejs开发命令行模块异常简单 先说一下node module的作用 封装常见类库 命令行工具 nodejs这几年之所以如此快的崛起,就是因为模块编写简单,npm无比强大 npm是nodejs最好的东西,常用分类 1)命令行工具 比如express-generator 比如gulp 和grunt 2)shell相

  • 我想创建一个运行多个python项目的脚本。每个项目都是阻塞的(意味着每个项目都应该永远运行),所以这个脚本必须并行运行每个项目。此外,我希望在关闭主shell之后,所有这些进程都关闭。这是我想出的shell代码 我尝试使用&使python进程异步运行,但是脚本在第二行之后没有继续,只有第一个项目在运行。 有没有一种方法可以运行所有的python进程?

  • bl_update 源代码: systemcmds/bl_update 从文件烧写引导程序的实用程序 用法 bl_update [参数...] setopt 设置可选位来解锁FLASH(仅在锁定状态时需要) <file> 引导程序的二进制文件 config 源代码: systemcmds/config 配置传感器驱动器(采样率、发布频率以及范围等等) 用法

  • 下列页面给出了PX4模块、驱动和命令的相关文档。这些文档描述了所提供的功能,高级实现概述以及如何使用命令行界面。 Note 这是从源代码自动生成的,并且包含最新的模块文档。 这不是一个完整的列表,并且NuttX提供了一些额外的命令(例如free)。 在控制台使用help来获取所有可用命令的列表,在大多数情况下,command help将给出用法说明。 因为这份文档是从源代码生成的,所以有任何错误的

  • 问题内容: 我知道可以从命令行使用以下命令调试Python脚本 如果是打算与一起运行的脚本。 但是,python模块应与一起运行。即使包含相对导入的脚本也应使用来运行。如何在的控制下运行?以下 无效 : 问题答案: 您现在无法执行此操作,因为会终止选项列表 这意味着 mod的 工作是解释其余的参数列表,而这种行为完全取决于 mod 在内部的设计方式以及它是否支持另一个 -m 让我们看看里面有什么发