Jose Ramon
Jose Ramon

Reputation: 5444

Correctly install Java for Matlab

I am trying to extract a jar file from Matlab code using javac from Library Compiler (java package).

I have set JAVA_HOME to:

C:\Program Files\Java\jdk1.7.0_71

and added to PATH:

C:\Program Files\Java\jdk1.7.0_71\bin.

When I enter java -version in my console, I get java version jdk1.7.0_71 and running javac -version shows jdk1.7.0_71.

However, it seems that matlab could not find javac, thus, I am not able to compile my .m code into a .jar file. When I tried to compile .m code I got the following:

Error: An error occurred while shelling out to javac (error code = -1).
Unable to build executable.
Executing command: ""C:\Program Files\Java\Java\jdk1.7.0_11\bin\javac" -verbose - classpath "...\MATLAB\R2014a\toolbox\javabuilder\jar\javabuilder.jar" -d   "...\features_extraction\for_testing\classes"  "...\features_extraction\for_testing\features_extraction\Class1.java" "...\features_extraction\for_testing\features_extraction\Features_extractionMCRFactory.java" "...\for_testing\features_extraction\Class1Remote.java" "...\for_testing\features_extraction\package-info.java""

This is the directory of my java bin folder and javac.exe exists : ...\Java\jdk1.7.0_71\bin\bin\javac? I found this link for compatibility between Java and Matlab2014a(which is my version) here. What should I check in order to correctly link Matlab to Java? A few days ago Matlab was working correctly with Java.

In my PATH I noticed the existence of the following path: C:\ProgramData\Oracle\Java\javapath in which there are three wrong shortcuts to java.exe, javac.exe, and javax.exe. When I type in matlab console getenv JAVA_HOME I am getting C:\Program Files\Java\jdk1.7.0_11 while when I wrote version -java I got: Java 1.7.0_11-b21 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode. When I write javac in matlab console I am getting: Undefined function or variable 'javac'.

When I try to built C++ library I got a similar issue: Error: An error occurred while shelling out to mbuild (error code = -1). Unable to build executable.

EDIT: Does the absence of the proper MCR counts in my case?

Upvotes: 11

Views: 7211

Answers (3)

JacobD
JacobD

Reputation: 627

I was having a very similar problem with my installation. I set the environment variable (press enter image description here > type env > Enter) JAVA_HOME (under "User variables") to my JDK home directory (not the bin folder) without any trailing \ or ;.

The problem occurs because MATLAB cannot execute javac properly, however, in order to work out exactly what MATLAB is trying to execute (which is not working) we need to use the command window and not the Library Compiler. It appears you have already done this but for completeness I will add the process here for others.

To find what MATLAB executes, click "Open log file" and copy the entire first line.

Library Compiler Error

Error Log

Paste the first line in the MATLAB command window and add -v to the end. Press enter to run the command and note the "Executing command:" that is printed to the screen.

Once you have the "executing command" that MATLAB returns for you, check the first path in that command and make sure it matches your javac file. In your original post you have done this and posted

C:\Program Files\Java\Java\jdk1.7.0_11\bin\javac

a path which contains \Java\Java, if this isn't a typo then it may be a problem as it is not the default Java installation path. You also say after that your installation is at

...\Java\jdk1.7.0_71\bin\bin\javac

which contains \bin\bin and is also not the default java bin install directory, perhaps another typo?

If the path to javac matches exactly you could try copying and pasting the "executing command" into your OS's command window (enter image description here+R > cmd > Enter) and looking for errors. By doing this we can remove ourselves from the MATLAB installation and if errors still exist it likely has nothing to do with MATLAB.

To see if the same problem could be caused by other environment variables I removed every other path to a java installation (keeping JAVA_HOME) in my environment variables. MATLAB uses the absolute path to the java installation and so it was still able to compile with javac using only the JAVA_HOME environment variable.

Upvotes: 1

brettmichaelgreen
brettmichaelgreen

Reputation: 726

You said

getenv JAVA_HOME I am getting C:\Program Files\Java\jdk1.7.0_11 while when I wrote version -java I got: Java 1.7.0_11-b21

try to use setenv in MATLAB, doc here http://www.mathworks.com/help/matlab/ref/setenv.html

setenv('JAVA_HOME','C:\Program Files\Java\jdk1.7.0_71');
setenv('PATH','C:\Program Files\Java\jdk1.7.0_71\bin');

Upvotes: 2

ale64bit
ale64bit

Reputation: 6242

Following from the answers in this link

http://www.mathworks.com/matlabcentral/answers/131639-matlab-deploytool-not-working-fails-while-building

seems like you have to install JDK 1.7.0_11-b21, which is the one your MATLAB version is compatible with for compiling into jar. Also, after installing that specific version, you should modify the JAVA_HOME and PATH environment variables. Try that to see if it helps.

Upvotes: 1

Related Questions