【问题标题】:Compile java code in run time using C#使用 C# 在运行时编译 java 代码
【发布时间】:2012-12-01 15:28:40
【问题描述】:

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

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

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

【问题讨论】:

  • ...甚至是 ant、maven 等等...

标签: c# java compilation runtime


【解决方案1】:
  • 您需要在执行编译的系统上安装 JDK(或同等产品)

  • 您需要调用 Java 编译器

  • 您可能需要使用通过 Java 运行时(或等效)编译的代码

方法一: 使用编译器和使用编译代码的最简单方法是通过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/

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        • 1970-01-01
        相关资源
        最近更新 更多