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

5

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

那么编译Java代码是否也有可能呢?如果不行,有没有其他的替代方案?

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


甚至包括ant、maven等任何工具... - ppeterka
3个回答

2
  • 在进行编译的系统上需要安装JDK(或相当的软件)

  • 您需要调用Java编译器

  • 您可能需要使用Java运行时(或相当的软件)来使用已编译的代码

方法A: 使用编译器和已编译代码的最简单方法是通过Process.Start,如Kieren的答案中所述。只要您拥有必要的组件,这就很容易。

//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
为了进一步解释driis和ppeterka所说的,由于Java不是.NET语言(J#接近但已经不存在),因此没有内置的方法。您需要使用Process.Start来启动Java编译器。

0

你的具体情况可能需要这样做,但Java并不是为此而构建的,它是在编译时而不是运行时进行编译的。虽然Miltiadis Kokkonidis的答案可行,但最好使用适合您问题的不同语言,或者利用该语言的优势来解决手头的问题,而不是试图将其塞入不想去的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接