如何在MacOSX上为JRE 7安装无限强度的JCE?

39

我在MacOSX上安装了Oracle JRE 7(不是JDK),但无法确定JCE管辖文件的位置。

我需要将它们替换为无限制强度版本。


可能是 https://dev59.com/anM_5IYBdhLWcg3w43lt 的重复问题。 - Duncan Jones
2
这不是重复的问题,因为JRE 7似乎没有Java Home,或者我找不到它...这是我的问题。 - Andrea Mariottini
两秒钟的谷歌搜索(搜索“macosx java home”)找到了这个网站:http://developer.apple.com/library/mac/#qa/qa1170/_index.html。在提问之前,您有没有进行过研究? - Duncan Jones
5
这是JDK Java Home的路径,而不是JRE。在评论之前,你有没有阅读过? - Andrea Mariottini
3个回答

32

我已经安装了 Oracle JDK,如果有帮助的话,在我的情况下目录是 /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/security/。你的情况可能会有所不同,如果是这样,请运行 find . -name local_policy.jar 看看会出现什么。


1
我找到了两个:./Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/local_policy.jar./Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre/lib/security/local_policy.jar我认为第一个是我要找的。 - Andrea Mariottini

26

这是针对JDK而不是JRE的。


我在Mac上,使用OSx Lion,并使用/usr/libexec/java_home找到我的Java主目录。

/usr/libexec/java_home -V
# Matching Java Virtual Machines (3):
#     1.7.0_51, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
#     1.6.0_65-b14-462, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
#     1.6.0_65-b14-462, i386:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
# 
# /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

/usr/libexec/java_home
# /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

/usr/libexec/java_home -v 1.6
# /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/usr/libexec/java_home -v 1.7
# /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

从这里您可以使用此可执行文件和查找工具来定位这些文件

find $(/usr/libexec/java_home -v 1.7) -name local_policy.jar
# /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/security/local_policy.jar

find $(/usr/libexec/java_home -v 1.7) -name US_export_policy.jar
# /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/security/US_export_policy.jar

结合 @ngreen 的回答,可以得到这些文件的 MD5 值(如果您想要)

find ~/Downloads/UnlimitedJCEPolicy -name *.jar |xargs md5
# MD5 (/Users/nperry/Downloads/UnlimitedJCEPolicy/local_policy.jar) = 9dd69bcc7637d872121880c35437788d
# MD5 (/Users/nperry/Downloads/UnlimitedJCEPolicy/US_export_policy.jar) = 3bb2e88a915b3cb003ca185357a92c16

find $(/usr/libexec/java_home -v 1.7) -name local_policy.jar | xargs md5
# MD5 (/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/security/local_policy.jar) = f41ab8f64b1fa13fec7276579c420951

find $(/usr/libexec/java_home -v 1.7) -name US_export_policy.jar | xargs md5
# MD5 (/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/security/US_export_policy.jar) = d5d126ae15abecb7d6e3a28b0d57543e

你可以看到我还没有替换这些文件。

如果需要,备份原始文件。

mkdir ~/Downloads/JCEPolicy-originals-1.7/
cp $(find $(/usr/libexec/java_home -v 1.7) -name local_policy.jar)     ~/Downloads/JCEPolicy-originals-1.7/
cp $(find $(/usr/libexec/java_home -v 1.7) -name US_export_policy.jar) ~/Downloads/JCEPolicy-originals-1.7/

你可以用这个替换文件。

sudo cp ~/Downloads/UnlimitedJCEPolicy/local_policy.jar $(find $(/usr/libexec/java_home -v 1.7) -name local_policy.jar)
sudo cp ~/Downloads/UnlimitedJCEPolicy/US_export_policy.jar $(find $(/usr/libexec/java_home -v 1.7) -name US_export_policy.jar)

获取MD5值可以告诉我它是否有效

find $(/usr/libexec/java_home -v 1.7) -name local_policy.jar | xargs md5
# MD5 (/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/security/local_policy.jar) = 9dd69bcc7637d872121880c35437788d

find $(/usr/libexec/java_home -v 1.7) -name US_export_policy.jar | xargs md5
# MD5 (/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/security/US_export_policy.jar) = 3bb2e88a915b3cb003ca185357a92c16

2
这是JDK而不是JRE。 - Andrea Mariottini

24

您对Thom的回答提出的评论是正确的。JRE路径为/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/,而JCE文件则位于lib/security/下面。

我恰好安装了多个JVM,所以我认为展示一种检查特定JVM是否拥有正确文件的方法很值得。以下是一些命令,您可以使用这些命令来确定给定的Java安装是否已正确配置:

find ~/Downloads/UnlimitedJCEPolicy -name *.jar |xargs md5
cd /Library/Java/JavaVirtualMachines/  # -OR-
cd '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/'
find . \( -name local_policy.jar -or -name US_export_policy.jar \) |xargs md5

一旦您知道文件路径,就可以根据需要进行替换。请记住,每个Java版本可能需要不同的JCE库。根据兼容性,您可能需要针对6、7和8分别使用不同的jar包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接