我正在用C#编写一个多语言IDE.现在,它作为一个功能合理的编辑器.但是,我现在正在努力添加编译和运行
Java代码的能力(我知道在C#中编写这个代码听起来很愚蠢,但我更喜欢使用C#,我需要Java支持学校课程).
在此背景之后,问题是:从C#编译Java代码的最佳方法是什么?现在,我正在使用System.Diagnostics.Process类.基本上,我调用编译器的方式与从命令行调用javac的方式相同.这是我当前实现的一个粗略示例:
ProcessStartInfo buildInfo = new ProcessStartInfo(); buildInfo.WorkingDirectory = Path.GetDirectoryName(sourcePath); buildInfo.RedirectStandardOutput = true; buildInfo.RedirectStandardError = true; buildInfo.UseShellExecute = false; Process buildProcess = Process.Start(buildInfo);
我重定向标准输出和错误,因为稍后应用程序捕获它们以确定编译是否成功.有一个更好的方法吗?感觉有点草率,我想知道我是否在俯视某些东西.
解决方法
你还有其他选择. Java提供了JNI(Java Native Interface),它允许Java调用本机代码和* apropos本机代码来调用Java(尽管是以相当复杂的方式).
根据您希望的学习体验的多少,您可以直接使用JNI或使用jni4net等库.一个不同的互操作方法是使用ikvm,这是一个在clr中运行的jvm,但我不认为它对你有用,因为它不包含编译器.
您还可以研究替代编译器,例如gcj或ejc.
没有尝试编写IDE我不知道这些方法是否实际上比直接使用命令行更好.我的预感是,对于简单的集成,命令行更容易使用,但更复杂的情况,例如具有多个组件的大型项目的增量编译可能需要更紧密的集成.
如果您打算在键入时提供内联调试和错误突出显示等功能,则无论如何都需要更紧密的集成.
IDE是极其复杂的程序,即使仅仅是编程编辑器也足够复杂.