如何使用jshell运行java应用程序?
如何使用jshell运行java应用程序?它应该能够指定类路径并调用java命令,并像bash一样传递一些参数,例如如何使用jshell运行java应用程序?,java,java-9,jshell,Java,Java 9,Jshell,如何使用jshell运行java应用程序?它应该能够指定类路径并调用java命令,并像bash一样传递一些参数,例如 #!/bin/bash $ARGS=... $CLASSPATH=... java -cp $CLASSPATH $ARGS com.example.MyApp 更新: 我认为需要运行时或流程的包装,例如 jshell> private String executeCommand(String command) { ...> ...>
#!/bin/bash
$ARGS=...
$CLASSPATH=...
java -cp $CLASSPATH $ARGS com.example.MyApp
更新:我认为需要运行时或流程的包装,例如
jshell> private String executeCommand(String command) {
...>
...> StringBuffer output = new StringBuffer();
...>
...> Process p;
...> try {
...> p = Runtime.getRuntime().exec(command);
...> p.waitFor();
...> BufferedReader reader =
...> new BufferedReader(new InputStreamReader(p.getInputStream()));
...>
...> String line = "";
...> while ((line = reader.readLine())!= null) {
...> output.append(line + "\n");
...> }
...>
...> } catch (Exception e) {
...> e.printStackTrace();
...> }
...>
...> return output.toString();
...>
...> }
| Created method executeCommand(String)
jshell> String out =executeCommand("java --version");
out ==> "java 9.0.4\nJava(TM) SE Runtime Environment (bui ... d 9.0.4+11, mixed mode)\n"
jshell> System.out.println(out);
java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
要在jshell中运行任何应用程序,首先在开始时将类路径设置为jshell 例如:
jshell -class-path /Users/sree/Desktop/libs/jettison-1.0.1.jar
然后将类导入到运行的环境中
import org.codehaus.jettison.json.JSONObject;
这将把所需的类导入到环境中
现在运行所需的应用程序。就我而言,我参加了
String myString = new JSONObject().put("JSON", "Hello, World!").toString()
并且得到了输出
myString ==> "{\"JSON\":\"Hello, World!\"}"
回答传递命令行参数的问题。你必须用所有的值初始化这个类
Test instance = new Test("data","data1")
您的代码被破坏,因为您首先等待命令完成,然后才读取管道。如果该命令产生的输出超过管道缓冲区的容量,则该命令将被阻止,并且永远不会完成,因为此时没有人读取管道 在一个完美的世界里,你只需要
new ProcessBuilder(your command and args).inheritIO().start().waitFor()
与普通Java应用程序一样。不幸的是,jshell
以一种不起作用的方式更改了标准文件描述符(至少在我测试的Windows版本中是这样)
你可以用
void run(String... arg) throws IOException, InterruptedException {
Path tmp = Files.createTempFile("run", ".tmp");
try {
new ProcessBuilder(arg).redirectErrorStream(true).redirectOutput(tmp.toFile())
.start().waitFor();
Files.lines(tmp, java.nio.charset.Charset.defaultCharset())
.forEach(System.out::println);
}
finally { Files.delete(tmp); }
}
把它叫做,例如
run("java", "-version")
或
你在寻找一种从jshell编译java的方法吗?我只是在寻找一种从jshell调用普通“命令”的方法,如
java
或ls
等。如果你想用jshell构建java项目,gradle有一个jshell插件。在MacOS上也很好用。(Y)
run("java", "-d", "java.base")