ToolProvider.getSystemJavaCompiler()返回null - 可只安装

2019-07-22 01:33发布

我试图使用JavaCompiler进行类:

  • http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html

当我打电话ToolProvider.getSystemJavaCompiler()返回null。

我想这是因为我使用的是JRE,而不是JDK。

问题是我希望它在所有平台上,无论天气运行用户使用JRE或JDK。

如果有人知道如何解决这个问题,或者另一种方法使用,请发表评论。

任何帮助,将不胜感激。

Answer 1:

ToolProvider.getSystemJavaCompiler()不可用。

是的tools.jar从classpath缺少什么?

Set class path to the tools.jar文件可以在JDK \ jre目录中。

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");



Answer 2:

这里是如何运行你的应用程序的Java编译器时,有没有安装JDK。

首先,包括从你的Java应用程序JDK的tools.jar文件和tools.jar放到CLASSPATH中。 甲骨文可能会不喜欢你这样做。 但是,有法律的变通。 你从openjdk.org(OpenJDK的)提供的免费的JDK tools.jar文件,红帽(IcedTea项目),或Azul系统(祖鲁语)。

接着,代替使用ToolProvider.getSystemJavaCompiler()和JavaCompiler进行类,调用位于的tools.jar直接编译器。 下面是代码片段:

String classpath = ...; // make sure tools.jar is in this path 
String sourcepath = ...; // path to your sources
String putputpath = ...; // directory for generated class files
String filepath = ...; // file path the file you want to compile

String[] args = new String[] {
"-classpath", classpath,
"-sourcepath", sourcepath,
"-d", putputpath,
filePath
};
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
int compileStatus = javac.compile(args);


Answer 3:

我认为这是问题 .Explicitly指定的java.exe你使用作为一个在你的JDK目录的版本。

在这里看到的细节



Answer 4:

刚刚从/ lib目录复制的tools.jar文件它的工作原理

您可以通过获得的System.out.println(System.getProperty( “java.home”))

多数时候就像是C:\ Program Files文件\的Java \ JRE(版本)的Windows]



Answer 5:

另一种解决方案是: - http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7181951

复制的tools.jar在JDK_HOME / lib目录/成JRE_HOME / lib中/。 至少对我来说,它解决了我的问题神奇!

(我什么也没做推荐的上方。我只是复制它。)



Answer 6:

这里是为我工作简单的解决方案

我只是改变了JRE系统库..... Program Files文件\的Java \ jdk1.7.0_55 \ jre的,而不是.... Program Files文件\的Java \ jdk1.7.0_55 \ bin和它为我工作。



Answer 7:

在Mac上这个工作对我来说:

  System.setProperty("java.home", "/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home");
  javax.tools.JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

(它不会对IDK 10个工作由于某种原因)。



Answer 8:

我曾在我的构建路径都JRE和JDK ...我只是删除了JRE和固定。



文章来源: ToolProvider.getSystemJavaCompiler() returns null - usable with only JRE installed?
标签: java javac