Java 9有一个用于Java的读码打印循环,称为jshell.我在命令行中看到它在基本模式下工作。它也可以用于远程进程吗?换句话说,我能否连接到另一个Java进程并输入在运行时中运行的代码片段?这将是一种改变应用服务器配置状态的好方法,而不必编写带有UI的管理工具。
发布于 2017-07-06 12:59:04
简单的答案是,没有办法将jshell附加到正在运行的Java进程。jshell是一个独立的应用程序,运行在自己的JVM中。
发布于 2017-07-06 22:47:26
官方没有这样做的方式。
然而,重新绑定代码并通过Java代理在另一个VM上运行它并不困难。但是,这并不像您预期的那么好,因为不清楚shell应该使用什么类加载程序,以及它应该如何与运行中的程序交互。
发布于 2020-04-30 08:59:34
附加JShell是一个项目,它正是为此实现了对JShell的扩展。它使用Java代理与目标JVM进行通信。
我没有使用它,所以我不能说它工作得有多好。
快速检查后的观察
这个项目的例子读-我。
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=XXXhostname:XXXport (酌情更新XXXhostname和XXXport )启动目标JVM,并在使用JShell之前从该JVM调用new uk.org.cinquin.attaching_jshell.ExistingVMRemoteExecutionControl()。XXXhostname和XXXport值的java -cp lib/attaching_jshell.jar jdk.internal.jshell.tool.JShellToolProvider --execution "attachToExistingVM:hostname(XXXhostname),port(XXXport)"https://stackoverflow.com/questions/44929943
复制相似问题