错误:com.sun.crypto.provider.aesciper$General无法转换为javax.crypto.CipherSpi

错误:com.sun.crypto.provider.aesciper$General无法转换为javax.crypto.CipherSpi,java,gradle,liferay,paytm,Java,Gradle,Liferay,Paytm,您好,我正在Liferay dxp项目中使用Paytm校验和依赖项 但是我得到了错误:com.sun.crypto.provider.aesciper$General不能转换为javax.crypto.CipherSpi Gradle属性: dependencies {compile fileTree(dir: 'libs/', include: '*.jar') compileInclude name: 'paytmchecksum-1.1'} PaytmUtil包含以下代码 private

您好,我正在Liferay dxp项目中使用Paytm校验和依赖项

但是我得到了
错误:com.sun.crypto.provider.aesciper$General不能转换为javax.crypto.CipherSpi

Gradle属性:

dependencies {compile fileTree(dir: 'libs/', include: '*.jar') compileInclude name: 'paytmchecksum-1.1'}
PaytmUtil包含以下代码

private static String getCheckSumPayTm(TreeMap<String, String> reqMap){

    CheckSumServiceHelper checkSumServiceHelper =  CheckSumServiceHelper.getCheckSumServiceHelper();

    String checksum = null;
    try {
        checksum =  checkSumServiceHelper.genrateCheckSum("paytmKey", reqMap.toString());
        log.info("PAYTM CHECKSUM ================== "  + checksum);
    } catch (Exception e) {
        e.printStackTrace();
        log.error("error :" + e.getMessage());
    }
    return checksum;
}
私有静态字符串getCheckSumPayTm(TreeMap reqMap){
CheckSumServiceHelper CheckSumServiceHelper=CheckSumServiceHelper.getCheckSumServiceHelper();
字符串校验和=null;
试一试{
checksum=checkSumServiceHelper.genrateCheckSum(“paytmKey”,reqMap.toString());
log.info(“PAYTM校验和=;
}捕获(例外e){
e、 printStackTrace();
log.error(“错误:+e.getMessage());
}
返回校验和;
}

假设根据静态类层次结构,您希望
com.sun.crypto.provider.aesciper$General
javax.crypto.CipherSpi
的有效子类,那么您正在处理类路径上的重复类-不管您得到的是什么

compileInclude很适合在类路径上包含比您希望包含的代码更多的代码,即复制通过常规类加载机制生成的类

不幸的是,这个错误消息没有告诉您加载每个提到的类的类加载器。最有可能的是超类是重复的。您通常可以按照以下方式读取错误消息:

com.sun.crypto.provider.aesciper$General
不能从类加载器A转换为
javax.crypto.CipherSpi
加载-但是,它可以从类加载器B转换为
javax.crypto.CipherSpi


不幸的是,在这种情况下,您必须自己找到类加载器A和B,但是如果您在类路径上的任何位置查找
CipherSpi
,您应该能够找到它。它通常已经提供了,您不应该自己带来。

假设根据静态类层次结构,您希望
com.sun.crypto.provider.aesciper$General
javax.crypto.CipherSpi
的有效子类,那么您正在处理类路径上的重复类——不管您得到的是什么

compileInclude很适合在类路径上包含比您希望包含的代码更多的代码,即复制通过常规类加载机制生成的类

不幸的是,这个错误消息没有告诉您加载每个提到的类的类加载器。最有可能的是超类是重复的。您通常可以按照以下方式读取错误消息:

com.sun.crypto.provider.aesciper$General
不能从类加载器A转换为
javax.crypto.CipherSpi
加载-但是,它可以从类加载器B转换为
javax.crypto.CipherSpi


不幸的是,在这种情况下,您必须自己找到类加载器A和B,但是如果您在类路径上的任何位置查找
CipherSpi
,您应该能够找到它。它通常已经提供,您不应该自己带。

您好,我怎么能在gradle找到它?我使用的是“ibmjceProvider.jar”,java8jre还包含“sunjce_提供者”。我认为问题是存在的。不确定。需要您的指导。您将在运行时系统中找到重复项,然后在gradle中找出它们的来源。但是运行时将是查找任何内容的第一个地方。您好,我如何在gradle中找到它?我使用的是“ibmjceProvider.jar”,java8jre还包含“sunjce_提供者”。我认为问题是存在的。不确定。需要您的指导。您将在运行时系统中找到重复项,然后在gradle中找出它们的来源。但运行时将是查找任何内容的第一个地方。