Josh Sobel
Josh Sobel

Reputation: 1328

ToolProvider.getSystemJavaCompiler() returns null - usable with only JRE installed?

I am trying to use the JavaCompiler class:

When I call ToolProvider.getSystemJavaCompiler() it returns null.

I think this is because I'm using a JRE instead of a JDK.

The problem is I want it to run on all platforms regardless of weather the user is using a JRE or a JDK.

If anyone knows how to fix this, or an alternative method to use please comment.

Any help would be appreciated.

Upvotes: 25

Views: 21046

Answers (8)

Manuel Musetti
Manuel Musetti

Reputation: 1

I had both JRE and JDK in my buildPath...i just removed the JRE and it fixed.

Upvotes: 0

clankill3r
clankill3r

Reputation: 9573

On a Mac this worked for me:

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

(It does not work for idk 10 for some reason).

Upvotes: 0

Mr. Suryaa Jha
Mr. Suryaa Jha

Reputation: 1582

Just copy tools.jar file from /lib to It works

You can obtain by System.out.println( System.getProperty( "java.home"))

Most of time it is like C:\Program files\Java\jre(version) [ for windows ]

Upvotes: 3

Arshad Ali
Arshad Ali

Reputation: 93

here is simple solution that worked for me

I just changed the jre System library to .....Program Files\Java\jdk1.7.0_55\jre instead of ....Program Files\Java\jdk1.7.0_55\bin and it worked for me.

Upvotes: 0

user3509406
user3509406

Reputation: 409

Another solution is from: - http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7181951

Copy tools.jar in JDK_HOME/lib/ into JRE_HOME/lib/. At least to me, it solved my issue magically!

(I did nothing recommended as above. I just copied it there.)

Upvotes: 3

George Van Treeck
George Van Treeck

Reputation: 51

Here is how to run the Java compiler from your application when there is no JDK installed.

First, include the tools.jar file from a JDK with your Java app and put tools.jar in your classpath. Oracle probably won't like you doing that. But, there is legal work-around. You get the tools.jar file from the free JDKs offered by openjdk.org (openjdk), RedHat (IcedTea), or Azul Systems (Zulu).

Next, instead of using ToolProvider.getSystemJavaCompiler() and the JavaCompiler class, call the compiler located in tools.jar directly. Below is snippet of code:

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);

Upvotes: 5

Akhilesh Dhar Dubey
Akhilesh Dhar Dubey

Reputation: 2148

ToolProvider.getSystemJavaCompiler() is not available.

Is tools.jar missing from the classpath?

Set class path to the tools.jar file which can found in jdk\jre directory.

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

Upvotes: 11

PSR
PSR

Reputation: 40338

I think this is the problem .Explicitly specifying the version of java.exe you're using as the one in your JDK directory.

see here for details

Upvotes: 4

Related Questions