8

私は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);

後でアプリケーションがそれらをキャッチしてコンパイルが成功したかどうかを判断するため、標準出力とエラーをリダイレクトします。これを行うためのより良い方法はありますか?少しずさんな感じで、何か見落としているのか知りたかったです。

4

4 に答える 4

3

他のオプションがあります。JavaはJNI(Java Native Interface)を提供します。これにより、Javaはネイティブコード適切なものを呼び出すことができ、ネイティブコードはJavaを呼び出すことができます(かなり複雑な方法ではありますが)。

これをどの程度の学習経験にするかによって、JNIを直接使用することも、jni4netなどのライブラリを使用することもできます。別の相互運用アプローチは、clr内で実行されるjvmであるikvmを使用することですが、コンパイラーが含まれていないため、役に立たないと思います。

gcjやejcなどの代替コンパイラを調べることもできます。

IDEを作成しようとしたことがないので、これらのアプローチがコマンドラインを直接使用するよりも実際に優れているかどうかはわかりません。私の勘では、単純な統合の場合、コマンドラインの方が使いやすいですが、複数のコンポーネントを含む大規模なプロジェクトのインクリメンタルコンパイルなど、より複雑なシナリオでは、より緊密な統合が必要になる場合があります。

入力中にインラインデバッグやエラーハイライトなどの機能を提供することを計画している場合は、とにかくより緊密な統合が必要になります。

IDEは非常に複雑なプログラムであり、単なるプログラミングエディタでさえ十分に複雑です。

于 2013-01-28T21:21:33.750 に答える
2

簡単にグーグルで調べてみると、(当然のことながら) Java をコンパイルするための .Net API がないことがわかります。したがって、最も簡単な方法は、javac現在行っているように、おそらくコマンド ライン経由で使用することです。

あなたのコマンド ライン コードは、私が見た例と似ているため、改善の余地はあまりないと思います。したがって、あなたの質問に対する短い答えは次のとおりです。いいえ、あなたは上手です (とにかく、C# から Java をコンパイルするのと同じくらい上手です)。

于 2013-01-28T19:02:15.057 に答える
2

Java Invocation APIを使用してプロセス内で JVM をホストし、コンパイラ APIを介してコンパイラを実行できます。おそらく、コンパイルのために別のコンパイラ プロセスをスピンアップするよりも高速であり、確かに優れた学習体験になります (.NET 側から P/Invoke を使用する必要があります)。

于 2013-01-28T19:18:09.553 に答える
0

そこにはいくつかの無料および商用 ツールがあります。 -4033-bcb1-53dc5ff58e05

などなど…

于 2013-01-28T19:18:58.227 に答える