在 OS X 上运行 ProGuard:Apple 的 rt.jar 在哪里?
Posted
技术标签:
【中文标题】在 OS X 上运行 ProGuard:Apple 的 rt.jar 在哪里?【英文标题】:Running ProGuard on OS X: Where is Apple's equivalent to the rt.jar? 【发布时间】:2011-02-16 02:37:19 【问题描述】:我正在运行 ProGuard 来缩小我的 jar 文件。它需要的参数之一是系统的运行时 jar。这是在 Sun 发行版上的 $JAVA_HOME/lib/rt.jar
,但不是在 Apple 的 Mac OS X(在我的例子中是 v10.6 (Snow Leopard))上。
是否有适用于 OS X 的 rt.jar?
【问题讨论】:
【参考方案1】:它被称为 classes.jar,它位于 /System/Library/Frameworks/JavaVM.framework/Classes 下
详情请看这里:
http://lists.apple.com/archives/java-dev/2003/Mar/msg01530.html
【讨论】:
在我的系统 (Mojave 10.14.3) 上,除了 gradle 缓存 (~/.gradle/caches/) 之外,没有 classes.jar。但是,有一个 rt.jar,位于 /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/rt.jar。【参考方案2】:This blog entry 描述了一种在不修改 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 .
【讨论】:
【参考方案3】:在What should I set JAVA_HOME to on OSX 问题中有一些关于如何到达rt.jar
等效项的说明。
简短的回答是使用/usr/libexec/java_home
的结果或将JAVA_HOME
设置为$(/usr/libexec/java_home)
,然后在JAVA_HOME/bundle/Classes/classes.jar
找到classes.jar
(在OS X 中相当于rt.jar)
【讨论】:
【参考方案4】:在我的系统(带有 JDK1.8 的 Mojave 10.14.3)上,除了 gradle 缓存 (~/.gradle/caches/
) 之外,没有 classes.jar
。但是,/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/jre/lib/rt.jar
中有一个 rt.jar
。我将它和jsse.jar
以与Contents/Home/lib
文件夹中的Henrik 相同的方式链接:
➜ lib sudo ln -s ../jre/lib/rt.jar
➜ lib sudo ln -s ../jre/lib/jsse.jar
Proguard 现在可以工作了。
【讨论】:
【参考方案5】:对我来说,原因是我安装了 JDK 13。安装 JDK 1.8 后,该文件出现在 ProGuard 预期的位置。安装 JDK 1.8 后,您可以运行 sudo find /Library -name rt.jar
找到 rt.jar
的确切路径
【讨论】:
以上是关于在 OS X 上运行 ProGuard:Apple 的 rt.jar 在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Apple OS X 10.5 Leopard上构建和安装GNU wget