系统环境

macOS High Sierra
版本 10.13.1

JDK版本

1
2
3
4
5
6
7
➜ ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
1.8.0_112, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
➜ ~

方法1

编辑.bash_profile文件 vi ~/.bash_profile

1
2
3
4
5
6
7
8
9
10
11
# 设置 JDK 7
export JAVA_7_HOME=`/usr/libexec/java_home -v 1.7`
# 设置 JDK 8(如果有多个版本,需指定具体的版本号)
export JAVA_8_HOME=`/usr/libexec/java_home -v 1.8`
#默认JDK 7
export JAVA_HOME=$JAVA_7_HOME
#alias命令动态切换JDK版本
alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"

执行source ~/.bash_profile 保存

验证

1
2
3
4
5
6
7
8
9
10
➜ ~ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
➜ ~ jdk8
➜ ~ java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
➜ ~

再次验证
准备Hello.java

1
2
3
4
5
6
7
8
9
10
public class Hello {
public static void main(String[] args) {
// jdk8写法
new Thread(() -> test1()).start();
}
private static void test1(){
System.out.println("ok");
}
}

先切换jdk7,然后编译Hello.java

1
2
3
4
5
6
7
8
9
10
➜ test jdk7
➜ test javac Hello.java
Hello.java:3: 错误: 非法的表达式开始
new Thread(() -> test1()).start();
^
Hello.java:3: 错误: 非法的表达式开始
new Thread(() -> test1()).start();
^
2 个错误
➜ test

现在切回jdk8并重新编译

1
2
3
4
5
➜ test jdk8
➜ test javac Hello.java
➜ test java Hello
ok
➜ test

方法2

使用jenv 参考文章

后续

尽管这俩种方法都能切换jdk版本,但只是在当前shell中,如果重新开一个则会失效,始终是默认的jdk版本
解决方法:
Intellij Idea -> File -> Project Struction
example dissolve start page