我正在用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);
Run Code Online (Sandbox Code Playgroud)
我重定向标准输出和错误,因为稍后应用程序捕获它们以确定编译是否成功.有一个更好的方法吗?感觉有点草率,我想知道我是否在俯视某些东西.
你确实还有其他选择。Java提供了JNI(Java Native Interface),它允许Java调用本机代码,并且适当地,本机代码可以调用Java(尽管以相当复杂的方式)。
根据您想要的学习体验程度,您可以直接使用 JNI 或使用 jni4net 等库。另一种互操作方法是使用 ikvm,它是在 clr 内运行的 jvm,但我认为它对您没有用,因为它不包含编译器。
您还可以研究替代编译器,例如 gcj 或 ejc。
由于没有尝试编写 IDE,我不知道这些方法实际上是否比直接使用命令行更好。我的直觉是,对于简单的集成,命令行更容易使用,但是更复杂的场景,例如具有多个组件的大型项目的增量编译,可能需要更紧密的集成。
如果您计划在键入时提供内联调试和错误突出显示等功能,则无论如何都需要更紧密的集成。
IDE 是极其复杂的程序,即使只是编程编辑器也足够复杂。
| 归档时间: |
|
| 查看次数: |
1660 次 |
| 最近记录: |