I would like to run a jar, which was built with Matlab's Java Builder on Windows 7 in Ubuntu 14.04 using the MCR libraries. However, I am receiving the following error when testing the MCR installation for an App built with Java Builder:
sudo java -classpath "/opt/MCR/v84/toolbox/javabuilder/jar/javabuilder.jar:/media/sf_shared/for_testing/makesqr.jar" makesqr.Class1 5
java.lang.ExceptionInInitializerError
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getProxyLibraryDir(MCRConfiguration.java:260)
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.get(MCRConfiguration.java:71)
58)
...
at makesqr.Class1.main(Class1.java:112)
Caused by: java.lang.NullPointerException
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ProxyLibraryDir.get(MCRConfiguration.java:225)
at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ProxyLibraryDir.<clinit>(MCRConfiguration.java:255)
...
In order to reproduce the error, or to discover where I went wrong, here are all the steps I have done:
Background: I have created an Ubuntu VirtualBox from LAPP stack and added the Ubuntu desktop (Unity: sudo apt-get install ubuntu-desktop). Now I am attempting to install the MCR. - Download MCR zip and extract to MCR_SOURCE
- Go to my folder that contains the files: cd /media/sf_shared/MCR_ SOURCE
- Change installer_input.txt file:
destinationFolder=/opt/MCR
agreeToLicense=yes
outputFile=/opt/install.log
mode=silent
product.MATLAB
product.MATLAB_Builder_JA
# Note: To find out the required toolboxes >> start Matlab >> run your code and find out which toolboxes were used with: license('inuse')
- Install MCR: sudo ./install -inputFile /media/sf_shared/MCR_SOURCE/installer_input.txt >> success
- Note changing the /etc/environment file removes the sidebar from my Ubuntu desktop (another issue), so instead I am exporting the variables directly to a terminal. (Note: X11/app-defaults folder does not exist)
export LD_LIBRARY_PATH="/opt/MCR/v84/runtime/glnxa64:/opt/MCR/v84/bin/glnxa64:/opt/MCR/v84/sys/os/glnxa64:${LD_LIBRARY_PATH}"
export XAPPLRESDIR="/opt/MCR/v84/X11/app-defaults"
- Change the ownership of the /opt/MCR folder to my user name: sudo chown -R my-user-name:root /opt/MCR/
- Relax file and folder permissions for the /opt/MCR/ folder: sudo find /opt/MCR -type f -exec chmod 775 {} \; and sudo find /opt/MCR -type d -exec chmod 775 {} \;
- Install Java on Ubuntu: sudo apt-get install openjdk-7-jre; check existence with java-version (see here for details).
- Create the Java package makesqr as explained in "Matlab's JavaBuilder tutorial". This step is done on my Windows 7 machine, which runs Matlab R2014b (asserted that this is in accordance with the downloaded MCR earlier on). Matlab ver states that Java Version: Java 1.7.0_11-b21 with Oracle Corporation Java HotSpot™ 64-Bit Server VM mixed mode is used, and MATLAB Builder JA (Version 2.3.2).
- Test that it runs in Windows:
C:\>java -classpath "C:\MATLAB\R2014b\toolbox\javabuilder\jar\javabuilder.jar";C:\MATLAB\R2014b\work\makesqr\for_testing\makesqr.jar makesqr.Class1 5
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
- Make the package available to Ubuntu: I have copied the for_testing directory to a folder that my Ubuntu VM and Windows machine share. (double check ownership and permissions - similar to MCR folder step)
- Test MCR with Java:
sudo java -classpath "/opt/MCR/v84/toolbox/javabuilder/jar/javabuilder.jar:/media/sf_shared/for_testing/makesqr.jar" makesqr.Class1 5
This is where the above mentioned error message occurs. The error message indicates that the MCRConfiguration$ProxyLibraryDir cannot be obtained.
- What is this MCR configuration library directory?
- Do I need to add "this folder" to the classpath?
- Is something wrong of how the LD_LIBRARY_PATH or XAPPLRESDIR were set?