我是IntelliJ插件开发的新手,想知道如何在插件中从命令行执行命令。
我想调用当前项目根目录中的命令“gulp”。
我已经尝试过使用
了Runtime.getRuntime().exec(commands);
使用“cd C:\ Users \ User \ MyProject”和“gulp”之类的命令,但它似乎没有那样工作,我想,如果插件API提供了一种更简单的方法。
非常感谢你。 :-)
答案 0 :(得分:5)
我知道它有点晚了(1年后),但最近我正在开发一个IntelliJ插件,我遇到了同样的问题,这就是我使用过的,而且效果非常好。
首先,我们需要创建一个需要执行的命令列表:
ArrayList<String> cmds = new ArrayList<>();
cmds.add("./gradlew");
然后
GeneralCommandLine generalCommandLine = new GeneralCommandLine(cmds);
generalCommandLine.setCharset(Charset.forName("UTF-8"));
generalCommandLine.setWorkDirectory(project.getBasePath());
ProcessHandler processHandler = new OSProcessHandler(generalCommandLine);
processHandler.startNotify();
因此generalCommandLine.setWorkDirectory
设置为项目目录,可以等同于终端命令cd path/to/dir/
答案 1 :(得分:0)
Runtime类提供 exec(String [],String [],File)方法,其中最后一个参数是正在启动的子进程的工作目录。
插件API提供 OSProcessHandler 类(以及其他类,如 ProcessAdapter ),它可以帮助管理子进程,处理其输出等。
答案 2 :(得分:0)
ProcessOutput result1 = ExecUtil.execAndGetOutput(generalCommandLine);
result1.getStdOut
result1.getStdErr
有效
和
ScriptRunnerUtil.getProcessOutput(generalCommandLine, ScriptRunnerUtil.STDOUT_OUTPUT_KEY_FILTER, timeout);
都很好 它们内置在intellij中
import com.intellij.execution.process.ScriptRunnerUtil;
import com.intellij.execution.util.ExecUtil;