前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK17 Groovy Caffeine 模块化报错分享

JDK17 Groovy Caffeine 模块化报错分享

作者头像
FunTester
发布2024-02-03 15:29:50
1060
发布2024-02-03 15:29:50
举报
文章被收录于专栏:FunTesterFunTester

最近在升级各种依赖包的过程之总是能遇到一些Java模块化的问题。Java模块化是Java 9引入的一种新的特性,它将Java类库划分为若干个模块,每个模块都具有自己的包和类。模块化可以提高Java程序的安全性、可维护性和可移植性。

虽说如此,但是在升级JDK版本的过程中,总是会遇到各类相关的程序报错。已经完成模块化改造的依赖,无法兼容旧的项目,需要添加配置或者增加JVM启动参数。

今天在使用Caffeine异步缓存的过程中遇到一个无法访问匿名模块的问题。

代码语言:javascript
复制
Caused by: java.lang.IllegalAccessException: module jdk.proxy2 does not open jdk.proxy2 to unnamed module @6107227e

下面发生问题的脚本内容:

代码语言:javascript
复制
static void main(String[] args) {  
    LoadingCache<String, String> cache = Caffeine.newBuilder()  
            .build(key -> {  
                return "FunTester";  
            });  
    String value = cache.get("FunTester");  
  
    System.out.println("缓存: " + value);  
}

详细的报错信息如下:

代码语言:javascript
复制
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.codehaus.groovy.vmplugin.v9.Java9.of(Java9.java:160)
	... 23 more
Caused by: java.lang.IllegalAccessException: module jdk.proxy2 does not open jdk.proxy2 to unnamed module @6107227e
	at java.base/java.lang.invoke.MethodHandles.privateLookupIn(MethodHandles.java:259)
	... 28 more

按照报错信息找到的解决方案是要么进行模块化改造,增加模块配置信息,要么增加JVM启动参数类似:--add-opens jdk.proxy2/java.lang=ALL-UNNAMED 但是已经是匿名的了,实在找不到启动命令改增加什么。

然后就是升级依赖包,但当我把 ==Caffeine== 升级到最新版之后发现依旧无用。然后就利用排除法锁定了 ==Groovy== 的版本,由于上次的 ==BUG== 缘故,我停留在了 3.0.9 ,搜了一圈资料,决定升级新版本:

代码语言:javascript
复制
        <dependency>
            <groupId>org.apache.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>5.0.0-alpha-3</version>
        </dependency>

直接一步到位,升级到最新版本,没想到都已经是5.x了。

真是虐我千百遍。Groovy多适合用来作为脚本语言,真写项目还是Java稳定。

去搜官网资料确认的时候发现,其实这个问题很早就被发现了,官方给的缺钱命名是非法方法动态代理(# [JDK16] Illegal access to dynamic proxy):https://issues.apache.org/jira/browse/GROOVY-10137。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-30,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com