错误信息:java.lang.NoClassDefFoundError: Could not initialize class org.bouncycastle.cms.CMSSignedDataGenerator
这个CMSSignedDataGenerator类是
java.lang.Object下的public class CMSSignedDataGenerator
extends java.lang.Object
general class for generating a pkcs7-signature message.
这个类对应的jar是 org.bouncycastle下面的bcprov 的jar.诸如:bcprov-jdkXXXX.jar
处理办法:检查 应用中是否有需要的这个jar包,如果没有,部署之后的环境就可以通过jdk环境来配置。
实践证明对于bcprov需要使用正确的版本才不会出现诸如此类的java.lang.NoClassDefFoundError: Could not initialize class org.bouncycastle.XXXXXXXXXXXX
bcprov的jar包需要与jdk版本相匹配:
包名中jdk14的版本适用于jdk1.4,jdk15on的版本适用于jdk1.5以上,jdk15to18的版本适用于jdk1.5到jdk1.8,jdk18on的版本适用于jdk1.8以上,根据自己的jdk版本自行选择对应的版本。
一般这种问题,需要确认应用的开发时候依赖的是哪个版本的bcprov。 把对应版本的bcprov的jar包 放到:jdk的/jre/lib/ext下就可以了。 例如这次遇到的是 在jdk 1.8.0.201环境,应用开发使用的是bcprov-jdk18on-1.77.jar 所以将这个jar放到 /jre/lib/ext下 (原本使用的bcprov版本及比较老,替换)然后再启动应用就可以正常使用了。