在哪里放置 bouncycastle jar 使其成为 Java JDK 的加密服务提供商?

where to put bouncycastle jar to have it be a crypto service provider with Java JDK?

我在 Windows 10 上安装了 Java SE 开发工具包 16.0.2,看起来 Java 二进制文件已安装到 C:\Program Files\Common Files\Oracle\Java\javapath

我想安装 BouncyCastle 作为加密服务提供商,为此我想我需要将 Jar 文件放在 java-home/jre/lib/ext/目录。 C:\Program Files\Common Files\Oracle\Java\javapath 中没有 jre 目录,也没有 lib 目录。

那么我应该把 Jar 文件放在哪里呢?

简短回答:对于您 运行 的每个应用程序,您都明确设置了类路径。您只需要确保 bouncycastle 罐子在里面即可。

但是,没有引导类路径吗?

是;它包含 java.lang.String 之类的内容。你不能更改 JDK 以在引导类路径上拥有比没有 hackery 的标准集更多的内容。你不想要这个 hackery。

扩展机制如何?

不再存在。

CLASSPATH 环境变量呢?

过去时代的遗迹。所有 java 应用程序都通过显式指定类路径的启动器、IDE 或构建工具启动(在这种情况下,CLASSPATH env var 被忽略),或者通过启动一个 jar,它定义了自己的类路径它的清单,CLASSPATH 再次被忽略。 Java 仍然支持 CLASSPATH 环境变量。不过,您 运行 使用 JVM 的任何应用程序都不应该使用它。 Java 支持 java.util.Vector,即使在 jdk16 中也是如此。并不意味着您应该使用它。

但我想要一个 java 我没有写的应用程序来使用 bc。

这通常不容易实现。我们回到一些相当具体的 hackery。

如何制作使用 bc 的 jar?

查看 jar 清单中的 Class-Path 条目如何工作。您可以将 zip 文件中的 bc jar 与您的应用程序一起发送(或安装程序),这样当您 运行 您的应用程序与您的主应用程序位于同一目录中时。您所需要的只是 jar 清单中的 Class-Path: thatbcjar.jar 并且它将被使用(并且该 jar 是相对于应用程序 jar 所在的目录解析的,因此无论您的工作目录是什么,这都有效启动你的 java 罐子)。