2011-05-04 81 views
2

当启动我的程序的下一个错误弹出Java安全类找不到

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

这意味着该类缺少虽然我手动此类发现,通过JAR/IDE的作品,但没有按”吨通过服务正常工作。

也许我需要做一些修改?但是哪个? 在此先感谢

+0

做了相同的JDK下你曾经找到解决这个问题的办法吗? – 2015-04-02 04:07:49

+0

在我的情况下(Tomcat 6 + Ubuntu 14.04上的Java 1.6),我的问题是通过添加JCE无限强度加密jar(@Thedaego回答)然后重新启动Tomcat来解决的。 – 2015-04-06 07:35:08

回答

4

该类应该位于jce.jar文件中。这必须在类路径上。仔细检查这应该是要么-cp参数,如果你启动应用程序-jar选项XOR在坛子里的Class-Path条目清单,如果你使用java -jar myapp.jar开始你的程序


你发现了一个共同的类路径参数WTF;) - 这是一条广为人知的规则:if you start your app with -jar option,then-cp option和CLASSPATH环境被忽略。 然后类路径只能在Manifest中指定。

快速的解决方法 - 假设你被命名为com.example.App“主类”,然后开始像这样的应用程序:

java -cp jce.jar com.example.App 
+0

对不起,我该如何检查我的班级路径?它似乎通过运行java -jar -cp jce.jar myapp.jar不适用于我+) – Swine1973 2011-05-04 15:51:53

0

检查其JRE是,当你启动,并确保JRE的使用/ lib/ext文件夹包含sunjce_provider.jar

+0

在那里找到它,所以我想它存在... – Swine1973 2011-05-04 15:22:38

0

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

+0

那么如果你的意思是当出口然后不,我只是将需要的罐子提取/包装到可运行的罐子中 – Swine1973 2011-05-04 15:39:17

5

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

使用合适的Unlimited Strength Cryptography Extenstions为我解决了这个问题。我相信我可能会不小心安装了Java 7的扩展,而不是6(我正在使用Java 6编译)

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

1

我们有权限将我们的文件设置为只读,并且给我们一个类似的错误。
更改权限和事情工作!

$ 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

0

我删除各种年长的JDK在/ Library/Java的/的虚(有OSX)并重新启动机器人工作室的错误走了之后,我的帽子重新设置JDK。也许它可以帮助别人。

0

这是问题与JRE版本,它应该指向同一个JRE版本正在使用的程序,它会寻找“的jre/lib/security中”应该是你的程序