【1】利用java 编译器API 编译 普通的java文件
1.1)代码如下:
package com.corejava.chapter10_2;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class JavaCompilerTest
{
public static void main(String[] args) throws FileNotFoundException
{
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
OutputStream out = new FileOutputStream("out.txt");
OutputStream err = new FileOutputStream("err.txt");
System.out.println(compiler);
System.out.println(System.getProperty("java.home"));
int result = compiler.run(null, out, err, "com/corejava/chapter10_2/Hello.java");
if(result == 0)
{
System.out.println("bingo");
}
else
{
System.out.println("oops");
}
}
}
1.2)错误如下(null 指针异常):
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【2】 解决方法
2.1)通过 System.out.println(System.getProperty("java.home")); ,我们知道了 java.home == C:\Program Files\Java\jre1.8.0_60 ;
引用 http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html 中的解决方法,通过查看 ToolProvider 的源代码,我们知道 他需要查找 java.home 下面的 lib 里的 tools.jar 文件, 而 tools.jar 文件通常在 jdk/lib 文件夹而没有在 jre中, 所以,我们只需要把 tools.jar 复制到 你的java.home映射目录/lib/ 就可以了;
2.2)复制 tools.jar 到 C:\Program Files\Java\jre1.8.0_60\lib(java.home == C:\Program Files\Java\jre1.8.0_60\)中后,运行结果为:
【3】 Conclusion
C1)需要知道 jvm 中的 java.home 映射的目录是什么? 不要瞎copy;
C2)知道 java.home后,就将 tool.jar copy 到 其路径下面 的 lib 文件夹中;