如何解决java.lang.reflect.InaccessibleObjectException在maven spri



我想更新一个用maven构建的spring应用程序,从java 8到java 17,但由于java平台模块系统,我得到了以下例外:Unable to make field private byte[] javax.crypto.spec.SecretKeySpec.key accessible: module java.base does not "opens javax.crypto.spec" to unnamed module @234523ab.

正如我在以前的帖子中所读到的,我试图通过在我的pom.xml文件中添加以下插件来打开包javax.crypto.spec到所有未命名的模块:

<plugin> 
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>@{argLine}
--add-opens java.base/javax.crypto.spec=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
然而,我仍然得到相同的异常。有人知道如何在maven spring应用程序中解决这个问题吗?此外,我读到--add-opens应该只用作一种变通方法,所以有人知道更好的解决方案吗?

虽然通常不推荐,但可以通过使用不安全反射直接更改内存来访问字段。

public static void forceAccessible(AccessibleObject ao) {
try {
Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
unsafeField.setAccessible(true);
((Unsafe) unsafeField.get(null)).putBoolean(ao, 12, true);
} catch (IllegalAccessException|NoSuchFieldException e) {
e.printStackTrace();
}
}

这段代码使用不安全反射来更改字段"override"的值。直接在内存中。该字段决定该字段是否可访问。

相关内容

  • 没有找到相关文章

最新更新