Rib*_*esg 7 xcode sh java-home sdkman
我正在使用 Kotlin 制作 iOS 应用程序,它依赖于从 XCode 调用 Gradle 的脚本构建阶段。使用 SDKMAN 安装 JDK 后,它不起作用并产生以下错误:
\nThe operation couldn\xe2\x80\x99t be completed. Unable to locate a Java Runtime.\nPlease visit http://www.java.com for information on installing Java.\nRun Code Online (Sandbox Code Playgroud)\n使用 SDKMAN 安装的 JDK 在我的系统上正常工作,SDKMAN通过从 或获取其脚本来设置JAVA_HOME为。但是 XCode Script Phase 使用,并且它似乎不读取此类文件。/Users/{user}/.sdkman/candidates/java/currentsdkman-init.sh.bash_profile.zshrc/bin/sh
我尝试导出诸如、等JAVA_HOME文件,但没有结果。~/.profile/etc/profile
经过一番研究,我发现这个输出是来自没有产生结果的调用/usr/libexec/java_home。我还发现,在正确设置的/usr/libexec/java_home终端内手动调用JAVA_HOME不会拾取它,因此JAVA_HOME在这种情况下玩弄是没有用的:它只是不读取它。
那么,如何让/usr/libexec/java_home命令找到在 MacOS 上使用 SDKMAN 安装的 JDK?
Rib*_*esg 15
似乎/usr/libexec/java_home大部分都没有记录,很难找到有关其工作原理的信息。结合网上找到的关于它的少量信息以及一些试验和错误,我设法/usr/libexec/java_home返回 SDKMAN\'s 当前的 JDK。
我们需要解决两个问题:
\n/usr/libexec/java_home已知的位置在 MacOS 上,手动安装的 JDK 的安装方式如下/Library/Java/JavaVirtualMachines(非详尽):
jdk-root-folder/\n Contents/\n Info.plist\n Home/\n <actual JDK files here>\nRun Code Online (Sandbox Code Playgroud)\n但 SDKMAN 只安装实际的 JDK 文件。解决方案是伪造 SDKMAN 未安装的所有内容:
\n/Library/Java/JavaVirtualMachines,我将其命名为我的sdkman-current,但名称并不重要。Contents里面创建一个文件夹sdkman-currentHome内命名的符号链接Contents,链接到您的实际 JDK:\njdk-root-folder/\n Contents/\n Info.plist\n Home/\n <actual JDK files here>\nRun Code Online (Sandbox Code Playgroud)\nInfo.plist文件:\nContents<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n <key>CFBundleIdentifier</key>\n <string>sdkman.current</string>\n <key>CFBundleName</key>\n <string>SDKMAN Current JDK</string>\n <key>JavaVM</key>\n <dict>\n <key>JVMPlatformVersion</key>\n <string>9999</string>\n <key>JVMVendor</key>\n <string>Homebrew</string>\n <key>JVMVersion</key>\n <string>9999</string>\n </dict>\n</dict>\n</plist>\nRun Code Online (Sandbox Code Playgroud)\n您可以在其中使用<string>您想要的任何值,但请注意,删除任何条目将阻止/usr/libexec/java_home找到您的 JDK。我将其版本设置为 9999,以便它始终是/usr/libexec/java_home.\xe2\x9e\x9c /usr/libexec/java_home\n/Library/Java/JavaVirtualMachines/sdkman-current/Contents/Home\n\xe2\x9e\x9c /usr/libexec/java_home -V\nMatching Java Virtual Machines (1):\n 9999 (arm64) "Homebrew" - "SDKMAN Current JDK" /Library/Java/JavaVirtualMachines/sdkman-current/Contents/Home\n/Library/Java/JavaVirtualMachines/sdkman-current/Contents/Home\nRun Code Online (Sandbox Code Playgroud)\n现在,依赖于/usr/libexec/java_home查找 JDK 的东西应该可以工作,包括使用/bin/sh.
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |