目录
前言具体操作原理做法脚本说明 其他其他注意事项 总结前言
当一个服务器因为各种原因需要安装多版本的 Java 的时候,切换不同环境运行 Java 费时费力,如果直接跟对应版本 Java 的全路径又麻烦。此处使用简便的方法,不切换环境变量即可做到如下的操作。
# 使用 Java 17 来运行 Jar 包java17 -jar test-17.jar# 使用 Java 8 来运行 Jar 包java8 -jar test-8.jar# 使用 nohup 不挂断来后台运行 Jar 包nohup java17 -jar test-17.jar &# 全路径运行/home/java/17/bin/java -jar test-17.jar
具体操作
原理
使用 Linux 下 shell 脚本来运行 Java,如下:
# test.sh 文件/home/java/17/bin/java -jar test-17.jar
上述 shell 脚本运行之后,即可在 Java 17 环境下运行test-17.jar
文件。同理,利用好 shell 脚本就能实现 Java 版本自由。
做法
在可以引用到全局的路径下,如/usr/bin
目录下新建java17
文件,写入如下语句:
# [你的 Java bin 路径] ${@:1}# 我本地的如下/home/java/17.0.2/bin/java ${@:1}
然后赋予运行的权限,如使用chmod 777 java17
来确保这个文件有全局运行的权限。
脚本说明
前一部分,也就是/home/java/17.0.2/bin/java
这块语句,就是本机要使用的 Java 的 bin 目录的路径;后一部分${@:1}
则是命令行参数,从索引 index = 1 to end 的所有参数。
如果命令如下:java17 -jar test-17.jar --spring.profiles.active=dev
,那么${@:1}
代表的就是-jar test-17.jar --spring.profiles.active=dev
的内容。也就是在 dev 环境下运行了对应的 Jar 包。
其他
按照上述配置后,运行如下代码可以出现如下不同的 version,更加说明了脚本的可用性。
java17 --versionopenjdk 17.0.2 -01-18OpenJDK Runtime Environment (build 17.0.2+8-86)OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
java8 -versionjava version "1.8.0_321"Java(TM) SE Runtime Environment (build 1.8.0_321-b07)Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
其他注意事项
当使用如上方法并使用 nohup 不挂断运行之后,查看运行的进程后,可以看到两个进程,一个是 shell 进程,一个是 Java 进程。如果只 kill shell 进程之后,Java 仍会继续运行。如果只 kill Java 进程,那么两个都会结束。所以 kill 的时候注意进程区分。
总结
上述利用 shell 来执行不同版本的 Java,同样可以转移到其他不同版本的软件中,或者给其他 Java 命令配置不同的环境,比如 javac、jstack 等。
这样子做了之后,就能更加快捷地使用不同环境的软件。
转载注明出处。
如果觉得《Linux 下实现不配置环境变量多 Java 版本运行脚本》对你有帮助,请点赞、收藏,并留下你的观点哦!