我正在使用 JDK9 的 JShell API。
目前,JShell API 会在内部自动启动远程 JVM。我不想自动启动进程,而是想将这两个进程分开。
注意:我知道我可以更改虚拟机选项。但我想看看虚拟机是否可以在另一台机器上运行。
默认的执行控制最终在代码中到达这个地方。
如果我指定启动,它会自动使用com.sun.jdi.CommandLineLaunch
连接器,根据定义实际启动 java 程序。如果我指定 no-launch,它com.sun.jdi.SocketListen
会像我预期的那样使用,一旦它启动了服务器套接字,它就会自动启动一个远程 vm 并连接到这个套接字。这我认为是出乎意料的。
我尝试过的其他事情,
Shell jshell = JShell.builder()
.executionEngine("jdi:hostname(localhost),launch(false)")
.build();
jshell.eval("1+2");
我希望这会失败或被卡住,直到一个单独的进程开始。
是否有另一种方法来指定连接器,或者不启动 JVM?(我也不对“本地”感兴趣)
一些简单的选项,例如能够指定com.sun.jdi.RawCommandLineLaunch
为接受自定义命令的连接器或能够使用套接字侦听连接器并等待其他进程连接。