1.https://blog.csdn.net/yangguosb/article/details/80619481
2.https://www.playpi.org/2019120101.html
3.https://maven.apache.org/plugins/maven-shade-plugin/
4.https://xie.infoq.cn/article/5a18670154051e26591e2090f
既然通过重命名jar包可以同一个项目中加载相同的jar不同版本,具体是什么原理呢,将打的包进行javap -c 看到后就恍然大雾。

原来,在生成的.class字节码文件中编译,构建包的时候替换成了新的包名,所以记载的时候相同jar不同版本就可以加载了。比较神奇,牛。
背景概述因为自己本身是做互联网金融业务,平时会对接比较多的银行,最近对接的一家给的加解密包,版本比较低导致在现有项目中不能使用,bcprov-jdk16-1.46.jar (12年的包),直接在现有项目中引入的话,直接报错。Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.bouncycastle.math.ec.ECPoint$Fp.<init>(Lorg/bouncyc
bcprov-jdk15on 简介、中文文档、中英对照文档 下载;bcprov-jdk15on、org.bouncycastle、中文文档、中英对照文档、下载、包含jar包、原API文档、源代码、Maven依赖信息文件、翻译后的API文档、jdk15on、bouncycastle、bcprov、jar包、java、中英对照文档;bcprov-jdk15on-1.68.jar、bcprov-jdk15on-1.60.jar、bcprov-jdk15on-1.59.jar、bcprov-jdk15on-1.58
关于java的国密算法原理以及sm2、sm3、sm4的演示demo,很多博主都写过。但是如果说自身项目中用到的bcprov这个依赖jar包的版本,和别人博客里演示的不一样,或者说引用了多个版本bcprov的jar包,这种情况怎么办呢?一般有两个方案,第一个是直接全部白嫖别人的版本,这种方案不是本文所讲内容。另一种方案就是弄明白每个版本依赖包的区别,这样我们的项目就可以只保留一个版本的依赖包了,而且想要留哪一个版本也不在话下。重要说明:
在看代码前我做一些说明,bcprov这个包在高版本中增加了一些国密相关的
今天在迁移一个项目,结果成功启动,但是在登录的时候,提示如下错误!翻译发现是因为签名不匹配。百度说是因为jar包冲突了。
java.lang.SecurityException: class “org.bouncycastle.crypto.digests.GeneralDigest”'s signer information does not match signer information of other classes in the same package
原来这个res
注:下文中的 *** 代表文件名中的版本号。
# 【bcprov-jdk15on-***.jar中文文档.zip】 中包含:
中文文档:【bcprov-jdk15on-***-javadoc-API文档-中文(简体)版.zip】
jar包下载地址:【bcprov-jdk15on-***.jar下载地址(官方地址+国内镜像地址).txt】
Maven依赖:【bcprov-jdk15on-***.jar Maven依赖信息(可用于项目pom.xml).txt】
Gradle依赖:【bcprov-jdk15on-***.jar Gradle依赖信息(可用于项目build.gradle).txt】
源代码下载地址:【bcprov-jdk15on-***-sources.jar下载地址(官方地址+国内镜像地址).txt】
# 本文件关键字:
bcprov-jdk15on-***.jar中文文档.zip,java,bcprov-jdk15on-***.jar,org.bouncycastle,bcprov-jdk15on,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,bouncycastle,bcprov,jdk15on,中文API文档,手册,开发手册,使用手册,参考手册
# 使用方法:
解压 【bcprov-jdk15on-***.jar中文文档.zip】,再解压其中的 【bcprov-jdk15on-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。
# 特殊说明:
·本文档为人性化翻译,精心制作,请放心使用。
·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等;
·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。
# 温馨提示:
(1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地);
(2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
# Maven依赖:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>***</version>
</dependency>
# Gradle依赖:
Gradle:
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '***'
Gradle (Short):
implementation 'org.bouncycastle:bcprov-jdk15on:***'
Gradle (Kotlin):
implementation("org.bouncycastle:bcprov-jdk15on:***")
# 含有的 Java package(包)(此处仅列举3个):
org.bouncycastle
org.bouncycastle.asn1
org.bouncycastle.asn1.anssi
......
# 含有的 Java class(类)(此处仅列举3个):
org.bouncycastle.LICENSE
org.bouncycastle.asn1.ASN1ApplicationSpecific
org.bouncycastle.asn1.ASN1ApplicationSpecificParser
......
public void test(){
String str = "adf4976d917a07e0513dce45b6981919";
String miwei = "{\"你好\":\"2020\"}";
String abc = "";
byte[] cipherText = null;
byte[] decr
问题源:
错误一:jboss java.lang.SecurityException: JCE cannot authenticate the provider BC
错误二:java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
工作环境中,调用了【bcprov-jdk1
bcprov-jdk16是java安全加密库Bouncy Castle的一个版本,noclassfound则说明在使用该库时未找到相应的类。
出现这样的错误可能有以下几个原因:
1. 包或类名错误:在引用bcprov-jdk16时,可能出现包名或类名错误的情况。需要检查相关引用的包名和类名是否正确。
2. 缺失依赖库:bcprov-jdk16是一个开源的库,它可能依赖于其他的库。如果缺少相关依赖库,则会出现noclassfound错误。
3. 版本不兼容:有时,bcprov-jdk16的版本与项目中其他的库版本不兼容。这时需要确认bcprov-jdk16的版本是否正确,并检查是否有其他库版本冲突的问题。
4. 缺失jar包:bcprov-jdk16需要将相应的jar包加入到项目中才能使用。如果缺失相应的jar包,则会出现noclassfound错误。
解决noclassfound错误的方法可以是:
1. 检查包名和类名是否正确引用。
2. 确认相关依赖库是否已经安装或者已经被加载。
3. 确认版本是否与其他的库兼容,并解决版本冲突的问题。
4. 将相应的jar包加入到项目中。
最后,noclassfound是常见的错误之一,在遇到时需要有耐心,仔细排查问题,解决相应的错误。
CSDN-Ada助手:
【分布式系统】分布式锁实现之Redis
CSDN-Ada助手:
【分布式系统】分布式锁实现之Redis
CSDN-Ada助手: