找不到正确的java_home路径报错解决
作者:ytKing
问题由来
在使用homebrew安装jadx后无法正常启动,报错如下:
example % jadx Original\$\$EnhancerByCGLIB\$\$818cf910.class
ERROR: JAVA_HOME is set to an invalid directory: @@HOMEBREW_JAVA@@
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
看报错的字面意思表示找不到jdk的路径,但是查看java版本以及路径配置:
~ % java -version openjdk version "17.0.1" 2021-10-19 OpenJDK Runtime Environment (build 17.0.1+12-39) OpenJDK 64-Bit Server VM (build 17.0.1+12-39, mixed mode, sharing) ~ % vim ~/.bash_profile ... export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home ...
发现并没有什么问题,那么是什么导致jadx找不到正确的路径呢?
问题排查
首先查看jadx的安装位置,由于是通过homebrew安装,通过如下命令可以查看jadx的安装路径:
~ % brew list jadx /opt/homebrew/Cellar/jadx/1.4.7/bin/jadx /opt/homebrew/Cellar/jadx/1.4.7/bin/jadx-gui /opt/homebrew/Cellar/jadx/1.4.7/libexec/bin/ (4 files) /opt/homebrew/Cellar/jadx/1.4.7/libexec/lib/ (51 files)
进入bin目录后vim查看一下jadx文件:
~ % vim jadx #!/bin/bash JAVA_HOME="${JAVA_HOME:-@@HOMEBREW_JAVA@@}" exec "/opt/homebrew/Cellar/jadx/1.4.7/libexec/bin/jadx" "$@"
可以看到启动命令中的JAVA_HOME变成了-@@HOMEBREW_JAVA@@,正好对应上了上面的报错。
解决方案
第一种:暴力解决法
最快的方式就是直接修改启动命令,由于是只读文件,先修改权限:
bin % sudo chmod 777 jadx
然后拿到上文中找到的正确的java_home的值替换-@@HOMEBREW_JAVA@@,替换后的启动命令如下:
#!/bin/bash JAVA_HOME="${JAVA_HOME:-/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home}" exec "/opt/homebrew/Cellar/jadx/1.4.7/libexec/bin/jadx" "$@"
替换后即可正常使用jadx。
第二种:正常解决法
想要正常的解决得先知道这个错误发生的原理,我们国内的用户使用homebrew时一般都是配置了国内的镜像源来提速的,而问题就出在国内的镜像源上了,从国内镜像安装依赖于 Java 的某些配置目前无法正常工作,正常来说@@HOMEBREW_JAVA@@是会被替换掉的,但是因为使用了国内的镜像源导致没有正常的被替换。而brew需要清单才能正确替换@@HOMEBREW_JAVA@@,但brew只知道如何从ghcr.io 获取清单。
查看 HOMEBREW_BOTTLE_DOMAIN 如下:
bin % echo $HOMEBREW_BOTTLE_DOMAIN https://mirrors.ustc.edu.cn/homebrew-bottles/bottles
想要正确安装只需要使用如下命令即可:
~ % HOMEBREW_BOTTLE_DOMAIN= brew reinstall kafka
最后附上github上对于此问题的相关讨论:讨论链接
到此这篇关于找不到正确的java_home路径报错解决的文章就介绍到这了,更多相关java_home路径报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!