9

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

4

3 回答 3

4

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

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

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

于 2016-06-23T12:05:39.257 回答
0

不,用 jshell 不容易。

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

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

https://github.com/lorenzoongithub/nudge4j

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

唯一需要注意的是 Java 8。

于 2016-06-30T10:19:02.997 回答
0

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

于 2017-01-30T11:38:41.977 回答