首先要明确一个问题,JDK与JRE的区别是什么?
JRE: Java Runtime Environment. It is basically the Java Virtual Machine where your Java programs run on. It also includes browser plugins for Applet execution.
JDK: It’s the full featured Software Development Kit for Java, including JRE, and the compilers and tools (like JavaDoc, and Java Debugger) to create and compile programs.
对应于命令行模式:
java -version 显示JRE版本
JDK包含了JRE,是一个工具集
javac -version 显示JDK版本
那么,显示的是什么版本,是系统的版本还是命令的版本?
这里需要知道另外一个命令:
/urs/libexec/java_home -V 显示系统中所有的JDK版本
比如我的macbook上的显示:
1.8.0_45, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
1.6.0_65-b14-466.1, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-466.1, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
默认用的是第一个版本,继续:
echo $JAVA_HOME
输出为空
export JAVA_HOME=”`/usr/libexec/java_home -v ‘1.6*’` “
输出:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
此时如果输入
java -version 或者 javac -version 显示的版本都是1.6.0,改动之前是1.8.0
猜想:运行java和javac命令受到java_home的影响,java_home改变了这两个命令的真实位置。
下面来寻找它们之间的关系:
1.找到java
和javac
命令的真实位置
> which java; which javac
/usr/bin/java
/usr/bin/javac
> ll /usr/bin/java; ll /usr/bin