使用C#在运行时编译java代码

时间:2012-12-01 15:28:41

标签: c# java compilation runtime

我知道可以在运行时使用C#编译c#代码,CSharpCodeProvider和CodeDom。

是否可以编译Java?如果不是,还有其他选择吗?

我希望我的应用程序能够编译C#和Java代码。

3 个答案:

答案 0 :(得分:2)

  • 您需要在执行编译的系统上安装JDK(或等效的)

  • 您需要调用Java编译器

  • 您可能需要使用Java Runtime(或等效的)

  • 来使用已编译的代码

方法A: 使用编译器和使用编译代码的最简单方法是在Kieren的答案中提到的Process.Start。只要您拥有必要的组件,这很容易。

//add this either atusing System.Diagnostics;

static void CompileJava(string javacPathName, string javaFilePathName, string commandLineOptions = "")
{
    var startInfo = new ProcessStartInfo();    
    startInfo.CreateNoWindow = true;      
    startInfo.UseShellExecute = false;   
    startInfo.FileName = javacPathName;   
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;  
    startInfo.Arguments = commandLineOptions + " " + javaFilePathName;

    try {
        using (var javacProcess = Process.Start(startInfo))
        {
            javacProcess.WaitForExit();
        }
   } 
   catch(Exception e)
   {
       // do something e.g. throw a more appropriate exception
   }

}

方法B: 如果需要更深入的集成,可以尝试使用本机链接方法(即使用.NET和Java本机接口进行互操作而无需调用外部进程)。先决条件与方法A相同。所需的投资要高得多,只有在方法A无法满足特定性能或其他约束条件时才应考虑这一点。

您可以通过以下链接找到一些信息:

从C#侧:http://blogs.msdn.com/b/texblog/archive/2007/04/05/linking-native-c-into-c-applications.aspx

从Java方面:http://docs.oracle.com/javase/6/docs/technotes/guides/jni/

答案 1 :(得分:1)

为了扩展driis和ppeterka所说的内容,没有内置的方法,因为Java不是.NET语言(J#已经关闭但不再存在)。您需要使用Process.Start来启动java编译器。

答案 2 :(得分:0)

您的具体情况可能需要它,但Java不是为此构建的,它构建为在编译时编译,而不是在运行时编译。虽然Miltiadis Kokkonidis的答案有效,但最好是使用更适合您问题的不同语言,或者根据当前情况使用语言优势,而不是尝试将其挤压到适合不想去的地方。 / p>