无法找到 Java 安全类

发布于 2024-11-04 18:11:22 字数 206 浏览 0 评论 0原文

启动我的程序时,会弹出下一个错误

java.lang.NoClassDefFoundError:无法初始化类 javax.crypto.SunJCE_b

,这意味着该类丢失,尽管我手动找到了该类,可以通过jar/ide工作,但不能通过服务完美工作。

也许我需要做一些修改?但哪个? 提前致谢

When launching my program the next error pops out

java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.SunJCE_b

which means this class is missing although I've found this class manually, works via jar/ide but doesn't works prefectly via service.

Maybe I need to make a few modifications? but which?
Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

又爬满兰若 2024-11-11 18:11:22

我不知道这是否与您的问题相关,但由于我使用的 JCE 策略文件版本,我遇到了完全相同的行为。

使用正确的 无限强度加密扩展 为我解决了这个问题。我相信我可能不小心安装了 Java 7 的扩展,而不是 6。(我使用 Java 6 进行编译)

例如,对于 Windows 计算机,它们应该安装在已安装的 JDK 的 jre/lib/security 文件夹中: c:\program files\Java\jdk1.6.0_33\jre\lib\security

I don't know if this is relevant to your problem but I was experiencing the exact same behavior due to versions of the JCE Policy files I was using.

Using the proper Unlimited Strength Cryptography Extenstions solved this issue for me. I believe I might have accidentally installed the extensions for Java 7 as opposed to 6. (I was using Java 6 for compilation)

For a windows machine, they should be installed in the jre/lib/security folder of your installed JDK, for example: c:\program files\Java\jdk1.6.0_33\jre\lib\security

垂暮老矣 2024-11-11 18:11:22

该类应位于 jce.jar 文件中。这必须位于类路径上。仔细检查您的类路径参数,如果启动应用程序时不使用 -jar 选项,则该参数应该是 -cp 参数,或者是 Class如果您使用 java -jar myapp.jar 启动程序,则 jar 清单中的 -Path 条目


您发现了一个常见的 WTF ;) - 这是一个广泛未知的规则:if< /strong> 使用 -jar 选项启动应用程序,然后使用 -cp 选项和 CLASSPATH 环境被忽略。 然后类路径必须仅在清单内指定。

快速解决方法 - 假设您的“主类”名为 com.example.App,然后像这样启动应用程序:

java -cp jce.jar com.example.App

The class should be located in the jce.jar file. This has to be on the classpath. Double check your classpath parameters which should be either the -cp parameter if you start the application without the -jar option xor the Class-Path entry in the jars manifest if you use java -jar myapp.jar to start you program


You found a common WTF ;) - that's a widely unknown rule: if you start you app with the -jar option, then the -cp option and the CLASSPATH environment are ignored. Then the classpath must specified inside the Manifest only.

Quick workaround - assuming, you "main class" is named com.example.App, then start the application like this:

java -cp jce.jar com.example.App
晒暮凉 2024-11-11 18:11:22

我们将文件的权限设置为只能由 root 读取,并给了我们类似的错误。
更改权限并且一切正常!

$密码
/usr/lib/jvm/java/jre/lib/security
$ ls -l
共 128 个
-rw-r--r--。 1 root root 2177 2013 年 3 月 1 日黑名单
-rw-r--r--。 1 root root 84029 九月 30 日 18:01 cacerts
-rw-r--r--。 1 root root 2253 2013 年 3 月 1 日 java.policy
-rw-r--r--。 1 root root 11804 2013 年 3 月 1 日 java.security
-rw-r--r--。 1 root root 109 三月 1 2013 javaws.policy
-rw-r--r--。 1 root root 2481 九月 16 日 16:50 local_policy.jar
-rw-r--r--。 1 root root 0 2013 年 3 月 1 日 trust.libraries
-rw-r--r--。 1 root root 1924年7月18日17:42 truststore-epicinterbld.pem
-rw-r--r--。 1 root root 2465 九月 16 日 16:50 US_export_policy.jar

We had the permissions of our files only set to be read only by root and gave us a similar error.
Change permissions and things worked!

$ pwd
/usr/lib/jvm/java/jre/lib/security
$ ls -l
total 128
-rw-r--r--. 1 root root 2177 Mar 1 2013 blacklist
-rw-r--r--. 1 root root 84029 Sep 30 18:01 cacerts
-rw-r--r--. 1 root root 2253 Mar 1 2013 java.policy
-rw-r--r--. 1 root root 11804 Mar 1 2013 java.security
-rw-r--r--. 1 root root 109 Mar 1 2013 javaws.policy
-rw-r--r--. 1 root root 2481 Sep 16 16:50 local_policy.jar
-rw-r--r--. 1 root root 0 Mar 1 2013 trusted.libraries
-rw-r--r--. 1 root root 1924 Jul 18 17:42 truststore-epicinterbld.pem
-rw-r--r--. 1 root root 2465 Sep 16 16:50 US_export_policy.jar

夜雨飘雪 2024-11-11 18:11:22

启动时检查正在使用哪个 jre,并确保 jre/lib/ext 文件夹包含 sunjce_provider.jar

Check which jre is being used when you're launching and make sure the jre/lib/ext folder contains sunjce_provider.jar

别理我 2024-11-11 18:11:22

确保您没有使用扩展目录选项。过去,当我使用扩展目录选项而不是类路径时,它不再能够加载安全库和策略。当我重新使用显式类路径时,安全功能恢复工作。

Make sure you aren't using the extensions directory option. In the past when I used the extensions directory option instead of a classpath it was no longer able to load the Security libraries and policies. When I went back to using an explicit classpath the Security functionality resumed working.

慕烟庭风 2024-11-11 18:11:22

我删除了/Library/Java/VirtualMachine(有osx)中的各种旧的JDK,重新启动android studio后错误消失了,但我不想再次设置jdk。也许它对其他人有帮助。

I deleted various older JDKs in /Library/Java/VirtualMachine (got osx) and after restarting android studio the error was gone, but I hat to set the jdk again. Maybe it helps others.

吹梦到西洲 2024-11-11 18:11:22

这是 JRE 版本的问题,它应该指向与程序使用的 jre 版本相同的版本,它查找“jre/lib/security”应该位于程序的同一 jdk 下

This is issue with the JRE version, it should point to the same jre version as being used by the program, it looks for "jre/lib/security" should be under the same jdk of your program

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文