我正在运行ProGuard来缩小我的 jar 文件。它需要的参数之一是系统的运行时 jar。这适用$JAVA_HOME/lib/rt.jar
于 Sun 发行版,但不适用于 Apple 的 Mac OS X(在我的情况下为 v10.6 (Snow Leopard))。
OS X 有 rt.jar 吗?
它被称为 classes.jar,它位于 /System/Library/Frameworks/JavaVM.framework/Classes 下
在这里查看详细信息:
http://lists.apple.com/archives/java-dev/2003/Mar/msg01530.html
此博客条目描述了一种无需修改 Proguard 配置即可解决问题的相对直接的方法。
该条目建议创建两个符号链接,以便它们rt.jar
存在jsse.jar
于 Proguard 期望它们的路径中。
站在/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib
目录中并运行以下命令为我解决了这个问题:
sudo ln -s ../../Classes/classes.jar rt.jar
sudo ln -s ../../Classes/jsse.jar .
What should I set JAVA_HOME to on OSX question中有一些关于如何获得rt.jar
等价物的解释。
简短的回答是使用/usr/libexec/java_home
或设置JAVA_HOME
为的结果,$(/usr/libexec/java_home)
然后classes.jar
在JAVA_HOME/bundle/Classes/classes.jar
在我的系统上(带有 JDK1.8 的 Mojave 10.14.3),classes.jar
除了 gradle 缓存(~/.gradle/caches/
)中没有任何内容。但是,有一个rt.jar
in /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/rt.jar
。我以与文件夹jsse.jar
中的 Henrik 相同的方式链接它:Contents/Home/lib
➜ lib sudo ln -s ../jre/lib/rt.jar
➜ lib sudo ln -s ../jre/lib/jsse.jar
Proguard 现在可以工作了。
对我来说,原因是我安装了 JDK 13。安装 JDK 1.8 后,该文件出现在 ProGuard 预期的位置。安装 JDK 1.8 后,您可以运行sudo find /Library -name rt.jar
找到确切的路径rt.jar