I recently upgraded to Java7 on my Macbook Pro. I downloaded the JDK (not the JRE).
» javac version
javac 1.7.0_17
» echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home
However, when trying to run a build, one of the maven compiler plugins is failing, claiming I have a JRE installed:
» mvn install
[ERROR] execute error
org.apache.maven.plugin.MojoExecutionException: You need to run build with JDK
or have tools.jar on the classpath.
If this occures during eclipse build make sure you run eclipse under JDK as well
at com.mysema.maven.apt.AbstractProcessorMojo.execute(AbstractProcessorMojo.java:263)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
I'm confused, as I clearly have a JDK installed. My MAVEN_OPTS
don't do anything funny:
» echo $MAVEN_OPTS
-Xmx512m
Trying to debug, I checked the source of the plugin in question, which is doing the following:
try {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
if (compiler == null) {
throw new MojoExecutionException("You need to run build with JDK or have tools.jar on the classpath."
+ "If this occures during eclipse build make sure you run eclipse under JDK as well");
}
That seems harmless, so I suspected something wrong on my command line env, and wrote a simple test:
// Main.java
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class Main {
public static void main(String[] args) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
if (compiler == null)
{
System.out.print("Compiler is null");
} else {
System.out.print("Compiler is not null");
}
}
}
» javac Main.java
Main.java:1: cannot access javax.tools.JavaCompiler
bad class file: /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/jre/lib/rt.jar(javax/tools/JavaCompiler.class)
class file has wrong version 51.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
import javax.tools.JavaCompiler;
^
1 error
If I understand that error correctly, it suggests a Java7 compiler running against a Java5 rt.jar
?
I'm not sure what's going on here.
I clearly have a Java7 JDK installed, but don't understand:
Answers are suggesting a messed up JRE / JDK install. I agree this seems likely, but having trouble tracking down where the culprit lies.
Some additional info:
» which javac
/usr/bin/javac
ls -ltra /usr/bin/javac
/usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac
cd /System/Library/Frameworks/JavaVM.framework/Versions
ls -ltra
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.6.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.6 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.5.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.5 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.4.2 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.4 -> CurrentJDK
drwxr-xr-x 8 root wheel 272 18 Feb 08:39 A
drwxr-xr-x 11 root wheel 374 18 Feb 08:39 ..
lrwxr-xr-x 1 root wheel 1 14 Jun 11:14 Current -> A
lrwxr-xr-x 1 root wheel 58 14 Jun 11:15 CurrentJDK -> /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents
drwxr-xr-x 11 root wheel 374 14 Jun 11:15 .
So, the javac that is running is the one installed in A/Commands
. I'm not sure if this is correct or not. It seems wrong from my windows days, but I'm not familiar enough with how Mac treats Java install to go tinkering.
My $JAVA_HOME
points to /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home
, which has the following:
drwxrwxr-x 10 root wheel 340 5 Feb 08:10 jre
-rw-rw-r-- 1 root wheel 123324 5 Feb 08:10 THIRDPARTYLICENSEREADME-JAVAFX.txt
drwxrwxr-x 5 root wheel 170 5 Feb 08:10 man
drwxrwxr-x 9 root wheel 306 2 Mar 02:10 db
-rw-rw-r-- 1 root wheel 3339 2 Mar 02:10 COPYRIGHT
drwxrwxr-x 9 root wheel 306 2 Mar 02:10 include
-rw-rw-r-- 1 root wheel 19997030 2 Mar 02:10 src.zip
-rw-rw-r-- 1 root wheel 447 2 Mar 02:10 release
-rw-rw-r-- 1 root wheel 172252 2 Mar 02:10 THIRDPARTYLICENSEREADME.txt
-rw-rw-r-- 1 root wheel 114 2 Mar 02:10 README.html
-rw-rw-r-- 1 root wheel 40 2 Mar 02:10 LICENSE
drwxrwxr-x 5 root wheel 170 2 Mar 02:10 ..
drwxrwxr-x 15 root wheel 510 2 Mar 02:13 .
drwxrwxr-x 13 root wheel 442 2 Mar 02:13 lib
drwxrwxr-x 43 root wheel 1462 2 Mar 02:13 bin
Java applets fail to launch after update to Java version 7 Update 65. This issue is seen with Java applets using Java _arguments parameter and if deployment.javaws.jre.0.args= is missing from the deployment.properties file. This issue has been fixed with Java 7 Update 67 (7u67). Download the latest Java version to resolve the applet loading issue.
Just to be clear, this is to uninstall all Java stuff. If you for some reason want to keep a different version of Java around, don't remove anything but the JDK itself (first command).
How to fix error “Updating Maven Project”? Create new maven based project or open existing maven project. In my case, I’m opening my existing Simplest Spring MVC Hello World Project in Eclipse. Click on Update Project... Click on Maven build... You should see BUILD SUCCESS message after successful run.
– NBW Mar 18, 2014 at 20:42 @NBW AFAIK Java apps on OSX have their own Java Version set in their Info.plist file (or something along those lines, e.g what version range they support or something). The change to JAVA_HOME will only apply to the current terminal session, but I think /usr/libexec/java_home might impact other sessions/environments.
I found a tools.jar
sitting in /Library/Java/Extensions
I'm not sure if this is standard or not.
However, copying the tools.jar
from the JDK7 $JAVA_HOME/lib
to /Library/Java/Extensions
solved all my problems.
I should also point out that in my original question I had updated the Java CurrentSDK
to point to JDK7
:
CurrentJDK -> /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents
This was a Bad Idea, as pointed out here.
I updated this to point back to 1.6. Although this seems counter-intuitive, it was required to get things working.
The current listing of /System/Library/Frameworks/JavaVM.framework/Versions
with a 1.7
JDK looks as follows:
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.6.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.6 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.5.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.5 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.4.2 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 18 Feb 08:36 1.4 -> CurrentJDK
drwxr-xr-x 8 root wheel 272 18 Feb 08:39 A
drwxr-xr-x 11 root wheel 374 18 Feb 08:39 ..
lrwxr-xr-x 1 root wheel 1 14 Jun 11:35 Current -> A
lrwxr-xr-x 1 root wheel 59 14 Jun 12:31 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
drwxr-xr-x 11 root wheel 374 14 Jun 12:31 .
The correct way to set JAVA_HOME on MacOS X is to use:
[user@ip ~]$ export JAVA_HOME=$(/usr/libexec/java_home -v1.7)
[user@ip ~]$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
Your java installation is broken if, after doing this, $JAVA_HOME/lib does not contain a tools.jar.
Tip: I have these two aliases specified in my ~/.bash_profile:
alias java6="export JAVA_HOME=$(/usr/libexec/java_home -v1.6)"
alias java7="export JAVA_HOME=$(/usr/libexec/java_home -v1.7)"
Placing jars in /Library/Java/Extensions is equivalent to putting them in the global classpath and is rarely a good idea.
Forget Maven.
What directory has the JDK /bin
directory? That's JAVA_HOME
.
I suspect that you've set the environment variable incorrectly.
And that /bin
ought to have all the executables for the JDK tools: javac, java, jar, javap, etc.
If that's not the case, then you don't have JDK, you've got JRE.
I've got a Windows machine. Here's where I have JDK installed:
C:\Program Files\Java\jdk1.7.0_17
And here's JAVA_HOME:
JAVA_HOME=C:/Program Files/Java/jdk1.7.0_02
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With