使用Mac fish jenv在多个??Java版本之间切换


警告

  • 这是一个备忘录
  • 与现有信息重复
  • 如果您需要更多信息,请随时在评论中告知我们。

你想做的事

  • 我想亲自使用现代Java(那个时代是Java11 !!!)
  • 毕竟与别人的项目是Java8
  • 看来你可以用jenv做到这一点

环境

  • 执行日期:2019/01/04
  • macOS Mojave 10.14.2
  • 鱼,版本3.0.0
  • 自制软件1.8.6

壳牌纪录

"要做的事情"和"不必做什么"混在一起。
一些输出已被省略。

版本信息

1
2
3
4
5
6
7
8
9
10
?> ~ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.2
BuildVersion:   18C54
?> ~ fish -v
fish, version 3.0.0
?> ~ brew -v
Homebrew 1.8.6
Homebrew/homebrew-core (git revision 0857; last commit 2019-01-03)
Homebrew/homebrew-cask (git revision 89dd0; last commit 2019-01-03)

下载自制酒桶版本

我仍然不确定这是什么,但是它可能是一个神奇的软件包,允许您使用多个版本。

1
x> ~ brew tap caskroom/versions

下载您最喜欢的Java

  • 自2019年1月起,每个版本对应的冲泡包装名称(尽管都是桶装的)

    • java……OpenJDK 11

    • java8……OracleJDK 8

    • java6……这是什么(从support.apple.com下载)

    • java-beta……OpenJDK 12早期访问(哇)

1
?> ~ brew cask install java java8

把jenv

类似于

pyenv。我从没用过pyenv,所以我并不熟悉。

1
2
?> ~ brew install jenv
??  /usr/local/Cellar/jenv/0.4.4: 78 files, 65.5KB, built in 6 seconds

??表情符号很可爱。

鱼的其他设置

鱼类的生长环境需要特殊设置。没有写在http://www.jenv.be/ https://github.com/gcuisinier/jenv上已经很老了。这部分是本文存在的唯一原因。

将路径传递给jenv

brew为您做到了,所以您不需要它。

设置鱼的jenv功能(?)

似乎您需要注册一个宏才能使用jenv。我不知道为什么有必要。好吧,我想知道该鱼的宏,脚本和函数在哪里应该被称为

1
2
> ~ ls -al /usr/local/bin/jenv
lrwxr-xr-x  1 (中略)  admin  29  1  4 00:32 /usr/local/bin/jenv -> ../Cellar/jenv/0.4.4/bin/jenv

嗯,鱼的实际状况似乎在/usr/local/Cellar/jenv/

左右

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
?> ~ find /usr/local/Cellar/jenv/ | grep fish
/usr/local/Cellar/jenv//0.4.4/libexec/fish
/usr/local/Cellar/jenv//0.4.4/libexec/fish/export.fish
/usr/local/Cellar/jenv//0.4.4/libexec/fish/jenv.fish
?> ~ cat /usr/local/Cellar/jenv/0.4.4/libexec/fish/jenv.fish
set PATH $HOME/.jenv/shims $PATH
command jenv rehash 2>/dev/null
function jenv
  set cmd $argv[1]
  set arg ""
  if test (count $argv) -gt 1
    # Great... fish first array index is ... 1 !
    set arg $argv[2..-1]
  end

  switch "$cmd"
    case enable-plugin rehash shell shell-options
        set script (jenv "sh-$cmd" "$arg")
        eval $script
    case '*'
        command jenv $cmd $arg
    end
end

我当时在那儿,也许我应该在鱼上注册这个jenv.fish
似乎在鱼中使用的函数应该放在~/.config/fish/functions/中(鱼#自动函数)

1
2
?> ~ mkdir -p ~/.config/fish/functions/
?> ~ cp /usr/local/Cellar/jenv/0.4.4/libexec/fish/jenv.fish ~/.config/fish/functions/

确定吗?

重新启动终端

也许这完成了jenv维护。

让我们切换版本

检查您拥有

的Java的java_home

1
2
3
4
5
6
?> ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    11.0.1, x86_64: "OpenJDK 11.0.1"    /Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home
    1.8.0_192, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home

底部的是当前路径通过的那个。可能是。

向jenv注册

/usr/libexec/java_home -v {バージョン名}将为您提供所需版本的java_home。我将其提供给jenv add

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
?> ~ jenv add (/usr/libexec/java_home -v 1.8)
oracle64-1.8.0.192 added
1.8.0.192 added
1.8 added
?> ~ jenv add (/usr/libexec/java_home -v 11)
openjdk64-11.0.1 added
11.0.1 added
11.0 added
?> ~ jenv versions
* system (set by /Users/(中略)/.jenv/version)
  1.8
  1.8.0.192
  11.0
  11.0.1
  openjdk64-11.0.1
  oracle64-1.8.0.192

已添加很多内容。耶。
这是否意味着您可以指定次要版本或主要版本?

让我们切换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
?> ~ jenv global 1.8
?> ~ jenv versions
  system
* 1.8 (set by /Users/(中略)/.jenv/version)
  1.8.0.192
  11.0
  11.0.1
  openjdk64-11.0.1
  oracle64-1.8.0.192
?> ~ java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
?> ~ javac -version                                                                                                                                                                                 01:26:14
javac 1.8.0_192
?> ~ jshell -version
Unable to locate an executable at "/Users/(中略)/.jenv/versions/1.8/bin/jshell" (-1)
?> ~ jenv global 11.0
?> ~ jenv versions
  system
  1.8
  1.8.0.192
* 11.0 (set by /Users/(中略)/.jenv/version)
  11.0.1
  openjdk64-11.0.1
  oracle64-1.8.0.192
?> ~ java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
?> ~ javac -version
javac 11.0.1
?> ~ jshell -version
jshell 11.0.1
?> ~ jenv global system

很高兴感觉到它正在切换。

1
2
3
4
?> ~ which java
/Users/(中略)/.jenv/shims/java
?> ~ which javac
/Users/(中略)/.jenv/shims/javac

我明白了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
?> ~ mkdir a
?> ~ cd a
?> ~/a jenv local 1.8
?> ~/a java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
?> ~/a cd ..
?> ~ mkdir b
?> ~ cd b
?> ~/b jenv local 11.0
?> ~/b java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
?> ~/b ls
?> ~/b ls -a
.             ..            .java-version
?> ~/b cat .java-version
11.0
?> ~/b cd ..
?> ~ cd a/
?> ~/a cat .java-version
1.8
?> ~/a mkdir b
?> ~/a cd b
?> ~/a/b java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
?> ~/a/b jenv local 11.0
?> ~/a/b java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)

对于每个

目录,将使用的版本写入.java-version,如果它不在您自己的目录中,则可以查看父目录的版本。将.java-version添加到.gitignore似乎很好。

概括

没有什么可以放在一起的。
Qiita它成为了似乎被评为最差文章排名的文章。
我担心无意中泄露个人信息。