【问题标题】:Java 9 REPL for running app用于运行应用程序的 Java 9 REPL
【发布时间】:2016-06-23 10:50:22
【问题描述】:

Java 9 在 JDK 发行版中引入了名为 JShell 的 REPL。有什么方法可以连接到运行某些应用程序的 JDK 的 JShell 并执行引用该正在运行的应用程序的命令。例如执行应用程序代码中的一些方法、检查对象等?

【问题讨论】:

  • 是否可以在其他 REPL 中做到这一点?
  • 不,这不是 JShell 的目标。目标是让您快速评估 java 语句。 JShell 会提供环境上下文来帮助你节省时间,你不能告诉他将应用程序作为你的环境上下文。
  • @bigdestroyer 有一个崩溃外壳,它提供了我提到的一些内容crashub.org
  • 而且崩溃不是复制品。

标签: java read-eval-print-loop java-9 jshell


【解决方案1】:

JShell 不是标准的 java 命令,它是另一个命令。一旦你打开外壳,它就会在 Read Eval Print Loop 中“运行”。一旦你输入一个命令,它就会被 shell 读取和解析,评估并打印结果。

您可以定义变量并将类添加到类路径,但我认为从那里启动应用程序或服务器是不可能的,至少在这个阶段不能,而且不能在同一个 JVM 中。由于您可以添加类,因此您可以实例化它们,但您无法检查它们的变量。但是,您可以在 JShell 范围内看到您实例化的变量(您创建了哪些对象,您只能访问和打印它们的公共方法和变量)。

JShell 似乎会有一个 api,它为其他可能性开辟了道路。

【讨论】:

    【解决方案2】:

    不,用 jshell 不容易。

    但是让我重新表述你的问题,以便我们不使用 jshell,而是使用任何 REPL java 工具:

    有什么方法可以将一些 REPL java 工具连接到正在运行的 java 应用程序并执行引用该正在运行的应用程序的命令。例如执行应用程序代码中的一些方法、检查对象等?

    https://github.com/lorenzoongithub/nudge4j

    那么你应该看看 nudge4j 它确实允许这样做

    唯一需要注意的是 Java 8。

    【讨论】:

      【解决方案3】:

      您可以考虑的替代选项类似于BeanShell(尽管 BeanShell 相当陈旧并且可能已被弃用)。你可以从你的应用程序内部启动一个 BeanShell 控制台,它允许你访问你的对象并调用它们的方法。有关一些想法,请参阅 JConsole 示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 2018-04-11
        • 1970-01-01
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多