当前位置: 首页 > 知识库问答 >
问题:

JDK 9 Mac OS jlink?

闾丘正志
2023-03-14

我在Mac OS上安装了JDK 9的发布版本。

jshell工作得很好,Jigsee模块支持工作,但没有jlink:

➜  java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

这是空的:

find /System/Library/Frameworks/JavaVM.framework/Versions/Current/ -iname jlink\*

仅供参考:

➜  ls -l $(which java)
lrwxr-xr-x  1 root  wheel  74 Nov  7  2016 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

共有3个答案

韩照
2023-03-14

这里有一些重要的背景:了解Oracle在Mac上的Java

标准JDK实用程序(java、javac等)实际上安装在<代码>/库/java/JavaVirtualMachine/(JDK\U版本)/目录/主页/bin<代码>。

路径中有usr/bin,在该目录中可以找到所有常用的JDK实用程序。当您键入java(或任何其他命令)时,这些是它找到的命令,但它们实际上是指向在系统/库/框架/JavaVM中具有相同名称的可执行文件的符号链接。框架/版本/当前/命令。这些可执行文件只是包装器,用于查询JAVA\u HOME环境变量(该变量应指向实际安装位置)并调用在那里找到的真实二进制文件。我不清楚为什么有人认为这两层抽象是必要的,但事实就是如此。

在Java 9发布后的某个时候,macOS中添加了jshell的符号链接和包装器,但似乎没有为jlink做这样的事情。

为了保持工作的一致性,我建议编写一个等效的包装器,将其放置在正确的位置,并在/usr/bin中为其添加一个符号链接。

遗憾的是,由于包装器脚本位于系统下,因此在禁用系统完整性保护之前,您无法创建或修改任何内容,即使是作为根用户。这需要几分钟的时间,需要重新启动几次,但很容易做到:

>

  • 重新启动您的机器。当它重新启动时,按住×R。这将导致机器以恢复模式启动。您可以在看到进度条时释放键。
  • 进入恢复模式后,从实用程序菜单中选择终端。
  • 在提示符下,键入csr disable。系统会提示您重新启动以进行更改。也这样做。
  • 回到常规模式后,打开终端并执行以下操作:

    % sudo vi /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jlink
    Password:
    

    在提示下输入密码。

    在vi中,按I切换到插入模式,然后输入以下文本:

    #!/bin/bash
    $JAVA_HOME/bin/jlink $@
    

    然后按esc退出插入模式,键入wq保存并退出。

    发出以下命令使脚本可执行,创建符号链接,使符号链接可执行,并检查您的工作:

    % sudo chmod +x /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jlink
    % sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jlink /usr/bin/jlink
    % sudo chmod +x /usr/bin/jlink
    % ls -la $(which jlink)
    lrwxr-xr-x  1 root  wheel    75B Jun 19 10:33 /usr/bin/jlink@ -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jlink
    % ls -la $(which java) 
    lrwxr-xr-x  1 root  wheel    74B Sep 25  2017 /usr/bin/java@ -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
    % jlink --version
    10.0.1
    % 
    

    现在是时候重新启用系统完整性保护了。重新引导回到恢复模式(步骤1中的说明)。

    如果您不想禁用/重新启用SIP,您可以在/usr/bin/jlink处创建脚本。

    希望将来的macOS版本会默认包含这些。

  • 弘伟彦
    2023-03-14

    要将JDK 9工具添加到路径中,请将以下内容添加到文件。主目录的bashrc

    export JAVA_HOME=$(/usr/libexec/java_home -v 9)
    export PATH="$JAVA_HOME/bin:$PATH"
    

    您是否注意到v 9?如果您想切换回JDK 1.8,可以将其更改为1.8。对于任何找不到的新手。查找器中的bashrc:按⌘⇧. (命令shift-dot)以显示隐藏文件。

    慕容雅珺
    2023-03-14

    您可以使用哪个JAVA验证您的JAVA\u主页,并确保它指向默认安装路径,理想情况下应该是

    /Library/Java/JavaVirtualMachines...
    

    [例如,我将其用作导出JAVA\u HOME=/Library/JAVA/JavaVirtualMachine/jdk-9.jdk/Contents/HOME/],此外,您可以在目录的bin文件夹中找到jlink

    find /Library/Java/JavaVirtualMachines/jdk-9.jdk -iname jlink\* 
    

    应该返回哪个

    /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin
    

    附加屏幕截图以参考其安装位置:-

    注意:虽然在屏幕截图中,该命令未成功运行,但其已被识别。

     类似资料:

    相关问答

    相关文章

    相关阅读