jdk9之后springboot项目访问外置jar包配置

启动命令增加

--add-opens java.base/jdk.internal.loader=ALL-UNNAMED

解释
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED 是 Java 9 引入的一个命令行选项,用于解决模块化系统(Module System)中的模块访问限制问题。

在 Java 9 中引入了模块系统,这使得 Java 应用程序能够被划分为模块,每个模块都可以指定其对其他模块的可访问性。模块系统引入了更严格的访问控制以提高安全性和封装性。

java.base 是 Java 平台的基本模块,jdk.internal.loader 是该模块中的一个包,它包含了 Java 类加载器(ClassLoader)的内部实现。在 Java 9 中,一些 JDK 内部的 API 和实现细节被声明为不公开(privateinternal),因此它们在默认情况下对于模块外部是不可访问的,即使是在同一个 JDK 中的不同模块也不能直接访问。

--add-opens 是一个命令行选项,用于解除模块的访问限制,允许指定模块向其他模块开放特定的包的访问权限。在这个例子中,java.base 模块下的 jdk.internal.loader 包会向所有未命名模块(ALL-UNNAMED)开放,允许未命名模块中的代码访问 jdk.internal.loader 包中的内容。

这种方式是一种权宜之计,可能会绕过模块化系统的限制并使一些非公开的 API 可以被访问。然而,这也可能会导致代码的不稳定性和不可移植性,因为它依赖于 JDK 内部的细节,可能会在将来的 JDK 版本中发生变化。因此,使用 --add-opens 命令行选项应当谨慎,并尽量避免在生产环境中使用,以确保代码的健壮性和可维护性。

jdk11不配置是不是可以访问外置jar包?
在 JDK 11 中,默认情况下是不允许访问 JDK 内部的一些非公开 API 或模块的私有内容的。这是因为 JDK 9 引入了模块系统,为了提高安全性和封装性,限制了对 JDK 内部的一些API的直接访问。

如果你的应用程序依赖于某些 JDK 内部的非公开 API 或模块的私有内容,没有显式地打开这些模块的话,默认情况下是无法访问这些非公开 API 或模块的私有内容的。

为了解决这个问题,可以通过使用 --add-opens 参数,打开指定模块对其他模块私有内容的访问权限。在你的应用程序中,如果需要访问 JDK 内部的某些模块内容,你可能需要使用 --add-opens 或者其他类似的命令来显式地打开这些模块的权限。

如果你的应用程序不依赖于 JDK 内部的非公开 API 或模块的私有内容,而只是要访问外部的 jar 包,通常不需要额外的配置或者权限设置。一般来说,外部的 jar 包是可以被访问的,只要你正确地将它们添加到你的类路径中或者在模块路径中引入它们即可。

你可能感兴趣的:(spring,boot,后端)