【问题标题】:Compile a .java File Programmatically [closed]以编程方式编译.java文件[关闭]
【发布时间】:2015-03-09 08:36:08
【问题描述】:

我想创建一个可以将 .java 文件编译为 .class 文件的程序,就像在这个网站上所做的那样: Innovation website

我的问题是:

  • 是否有我可以使用的库来执行此操作?
  • 我在哪里可以得到这个库?
  • 如果没有这方面的库,我该怎么做?

【问题讨论】:

  • 它正在编译文件。您必须获取文件并将它们作为参数传递给 jdk。我认为没有图书馆可以做到这一点。一旦你知道 java 是如何工作的,这就很简单了。
  • @luanjot 从 1.6 开始就在 JDK 中。

标签: java compilation


【解决方案1】:

您可以使用 Process 类作为

Process pro=Runtime.getRuntime().exec("javac FileName.java", null, new File("\path"));

【讨论】:

  • /path 是输出文件的路径吧?
  • 没有其输入文件FileName.java路径,输出文件将在同一位置生成
  • 哦,有没有办法使用该进程将文件移动到另一个目录?
  • Nvm 我只需要将 -d /outputPath 添加到进程中
  • 没错! -d 将其生成到特定目录
【解决方案2】:

使用 ProcessBuilder 执行系统命令。

安装JDK并形成命令“javac JavaFileName”将此传递给ProcessBuilder构造函数并调用方法start()

【讨论】:

  • 我们在引用的副本中经常看到这种情况。
【解决方案3】:
   JavaCompiler javac = ToolProvider.getSystemJavaCompiler();

JavaCompiler 的 javadoc 展示了如何使用这个 JDK 工具进行工作和编译。来自那里的一个 sn-p:

   File[] files1 = ... ; // input for first compilation task

   JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
   StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

   Iterable<? extends JavaFileObject> compilationUnits1 =
       fileManager.getJavaFileObjectsFromFiles(Arrays.asList(files1));
   compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call();

这绝不是一项简单的任务。但是通过 shell 调用 Java 编译器的通用方法(带有所有修饰)也不容易,而且这也适用于通过 Process 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多