#java #jvm #version #command-line-tool #macos #apple-silicon #utility

app javalocate

命令行工具,用于在 macOS、Linux 和 Windows 上查找 JVM 版本

6 个版本 (3 个重大更新)

0.7.1 2023年12月6日
0.7.0 2023年11月29日
0.6.0 2022年4月18日
0.5.0 2022年3月7日

#2#jvm

Download history 13/week @ 2024-03-09 2/week @ 2024-03-16 45/week @ 2024-03-30 12/week @ 2024-04-06

每月51次下载

Apache-2.0

38KB
625

javalocate

license Crates.io GitHub release (latest by date) ubuntu build windows build macOS build

命令行工具,用于在 macOS、Linux(Debian、Ubuntu、RHEL/CentOS & Fedora)和 Windows 上查找 JVM 版本 - 用于设置 JAVA_HOME,尤其是在具有不同 JVM 版本和架构的机器上非常有用。

想到了你,使用 Apple Silicon 硬件的 Java 开发者 🐱‍💻

安装

该实用程序可以通过 Homebrew 通过 homebrew-javalocate tap 安装

brew tap dameikle/javalocate
brew install javalocate

或者通过 crates.io 上的 javalocate crate 使用 Cargo 安装

cargo install javalocate

用法

该实用程序的设计类似于 /usr/libexec/java_home,通过提供一些标志来控制选择。

如下所示

OPTIONS:
    -a, --arch <ARCH>                   Architecture to filter on (e.g. x86_64, aarch64, amd64)
    -d, --detailed                      Print out full details
    -f, --fail                          Return error code if no JVM found
    -h, --help                          Print help information
    -n, --name <NAME>                   JVM Name to filter on
    -v, --version <VERSION>             Version to filter on (e.g. 1.8, 11, 17, etc)
    -r, --register-location <LOCATION>  Registers a custom JVM location directory to search in
    -x, --remove-location <LOCATION>    Removes a registered custom JVM location directory
    -l, --display-locations             Displays all the custom JVM location directories that are registered

输出

默认情况下,该实用程序输出找到的“顶级”JVM的单一路径位置,按降序版本排序(即 Java 17 > Java 8),优先考虑系统架构(即在 Apple Silicon Mac 上 aarch64 > x86_64)。

传递详细标志(--detailed-d)将打印找到的所有 JVM 的完整详细信息。

此标志还可以与过滤器结合使用,以显示筛选集的完整详细信息。

过滤

可以使用 nameversionarch 过滤选项单独或一起使用来微调选择。

例如,要获取 Java 17 的路径

javalocate -v 17

或者要获取 Java 11 的 x86_64 JVM 的路径

javalocate -v 11 -a x86_64

或者要获取最新可用的 aarch64 JVM 的路径

javalocate -a aarch64

您还可以通过在版本后附加一个 + 来指定最小版本

javalocate -v 1.8+

退出码

默认情况下,无论是否找到 JVM,该实用程序都返回 OK(0)退出码。

设置失败标志(_--fail 或 -f)将更改此行为,返回 CONFIG ERROR(78)退出码。

这可以在 shell 脚本中使用时很有用。

例如,以下示例在尝试设置 JAVA_HOME 环境变量时,如果找不到 Java 11 或更高版本,将返回错误代码

export JAVA_HOME=$(javalocate -v 11+ -f)

默认位置

该工具在以下操作系统的默认JVM安装位置进行查找:

操作系统 位置
macOS /Library/Java/JavaVirtualMachines
Ubuntu /usr/lib/jvm
Debian /usr/lib/jvm
RHEL /usr/lib/jvm
CentOS /usr/lib/jvm
Fedora /usr/lib/jvm
Windows 注册表 - HKEY_LOCAL_MACHINE\Software

它假定Linux和Windows上的JVM包中包含release文件,而macOS上则包含release文件和Info.plist文件。

已添加对从路径文件名中构建信息(在没有release文件的情况下)的实验性支持。这可能会出现在较旧的JVM上。

自定义位置

您可以使用自定义JVM位置选项添加自己的搜索位置。如果您维护自己的手动安装的JVM集合,这可能很有用。

例如,如果您将JVM手动安装到/opt/jvms目录中,您可以配置它使用--register-location (-r) 命令进行搜索

javalocate -r /opt/jvms
javalocate --register-location /opt/jvms

如果您想删除该位置,可以使用--remove-location (-x) 命令

javalocate -x /opt/jvms
javalocate --remove-location /opt/jvms

您可以使用--display-locations (-l) 命令列出当前已注册的位置

javalocate -l
javalocate --display-locations

技巧和窍门

Bash别名

将以下内容添加到您的~/.bashrc(或~/.bash_aliases)文件中

setjava() {
    export JAVA_HOME=`javalocate -v $1`
}

允许您快速在版本之间切换

setjava 17
echo $JAVA_HOME
setjava 8
echo $JAVA_HOME
setjava 11
echo $JAVA_HOME

Powershell

您可以使用以下语法在Powershell中设置所需版本

$env:JAVA_HOME=$(javalocate.exe -v 11)

构建

该工具是用Rust开发的,可以从源代码使用以下方式构建

cargo build

或对于发布版本

cargo build --profile release

许可证

版权所有 2022 David Meikle

根据Apache许可证版本2.0(“许可证”);除非您遵守许可证的条款,否则您不得使用此文件。您可以在以下位置获得许可证副本:

   http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件是按“原样”基础分发的,不提供任何明示或暗示的保证或条件。有关许可证的具体语言,请参阅许可证。许可证中规定了许可和限制的具体内容。

依赖项

~10–22MB
~331K SLoC