我现在正在开发一个SBT eclipse插件,它提供了一个图形界面来在Eclipse上运行SBT任务,比如Ant视图。
一般来说,我这样做是通过启动一个新的SBT进程,并将其OutputStream
重定向到Eclipse控制台视图,并写入其InputStream
来运行任务。
ProcessBuilder processBuilder = new ProcessBuilder("java",
"-Xms1024m", "-Xmx1024m",
"-XX:ReservedCodeCacheSize=128m",
"-Dsbt.log.noformat=true", "-XX:MaxPermSize=256m",
"-jar", getSbtLaunchPath()).directory(new File(path));
processBuilder.environment().put("JAVA_HOME", getJavaHome());
Process sbtProcess = processBuilder.start();
final InputStream inStream = sbtProcess.getInputStream();
(new thread to write the inputStream to eclipse console view)
OutputStream outStream = sbtProcess.getOutputStream();
PrintWriter pWriter = new PrintWriter(outStream); //the writer to write command to SBT process
这样,如果我想运行compile
任务,我就是这样做的:
pWriter.println("compile")
所有功能在Mac上运行良好。但是当我在Windows上测试它时,PrintWriter
无法按照假设写入SBT进程。
对于这个问题,我确信:
PrintWriter
可以在相同的情况下写入一个小的Java echo程序进程,这意味着SBT进程可能与某些部分的普通Java进程不同。我怀疑的是:
所以,我觉得是时候问你们了。你觉得这个问题怎么样?我想念一下吗?
答案 0 :(得分:0)
问题在于SBT使用的jline库。
我通过将-Djline.terminal=jline.UnsupportedTerminal
传递给java选项解决了这个问题。