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

JDK17 Groovy Caffeine 模块化报错分享

作者头像
FunTester
发布于 2024-02-03 07:29:50
发布于 2024-02-03 07:29:50
28300
代码可运行
举报
文章被收录于专栏:FunTesterFunTester
运行总次数:0
代码可运行

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Caused by: java.lang.IllegalAccessException: module jdk.proxy2 does not open jdk.proxy2 to unnamed module @6107227e

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
        <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 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
解决报错:Could not set property 'id' of 'class com.north.domain.Book' with value '1787299433834786818' C
捞月亮的小北
2024/05/07
5030
解决报错:Could not set property 'id' of 'class com.north.domain.Book' with value '1787299433834786818' C
JDK11升级JDK17最全实践干货来了
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
京东技术
2023/12/13
1.8K0
JDK11升级JDK17最全实践干货来了
idea 安装最新版本的时候,启动失败
-------------------------因为电脑之前装过 17版本 的 现在安装了19版本,17没有卸载,19的会默认集成17的一些配置
凯哥Java
2022/12/16
1K0
idea 安装最新版本的时候,启动失败
Stream-Query兼容JDK17
用户10136162
2023/11/07
2990
Java 17 更新(6):制裁!我自己私有的 API 你们怎么随便一个人都想用?
今天我们来聊聊 JEP 403: Strongly Encapsulate JDK Internals。这一条对于使用 JDK 内部 API 的应用场景来讲会比较受影响。
bennyhuo
2021/10/19
1.8K0
Java 17 更新(6):制裁!我自己私有的 API 你们怎么随便一个人都想用?
Gradle 6 Junit 5 测试错误
在使用 Gradle 进行 build 的时候运行测试,提示 build 不能完成,测试不能进行。
HoneyMoose
2020/03/31
1.2K0
JDK8升级JDK17过程中遇到的那些坑
JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。
程序猿川子
2023/05/24
2K0
【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`
在使用 AuthenticationManager 的时候,出现循环依赖问题 —— java.lang.StackOverflowError,查资料查了两天半,终于找到原因。
繁依Fanyi
2024/09/23
1520
【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`
Jdk 9 更新导致 Eclipse 启动问题
~/Documents/workspace/.metadata$ cat .log !SESSION 2017-12-01 19:15:35.976 ----------------------------------------------- eclipse.buildId=4.6.3.M20170301-0400 java.version=9 java.vendor=Oracle Corporation BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=zh_TW Framework arguments: -product org.eclipse.epp.package.jee.product -keyring /Users/jack/.eclipse_keyring Command-line arguments: -os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.jee.product -keyring /Users/jack/.eclipse_keyring
一个会写诗的程序员
2018/08/17
5480
单元测试 -- IllegalAccessError: class jdk.internal.reflect.ConstructorAccessorImpl loaded by org.powe...
而从Stackoverflow上查找,说是通过PowerMockIgnore忽略掉reflect可以通过,但是Ignore后,同样无法运行
None_Ling
2021/11/24
2.2K0
单元测试 -- IllegalAccessError: class jdk.internal.reflect.ConstructorAccessorImpl loaded by org.powe...
"Connection refused" when syncing Maven project in 2021.1 : java.rmi.ConnectException: Connection...
settings—》Build,Execution,Deployment—》Build Tools—》Maven—》Importing—》JDK for importer选择你安装的JDK版本
一个会写诗的程序员
2021/07/19
1.9K0
"Connection refused" when syncing Maven project in 2021.1 : java.rmi.ConnectException: Connection...
@DataJpaTest 注解测试提示 No ServletContext set 错误
出现这个问题的原因是你尝试 使用 @DataJpaTest 来对Spring Data JPA 数据进行测试。
HoneyMoose
2021/01/23
6600
@DataJpaTest 注解测试提示 No ServletContext set 错误
[跳坑] Minecraft Forge 服务端 搭建教程 和Java多版本管理
按照我前面一个文章的思路,我已经开启了一个服务器。在环境已有Java 11的情况下,我继续安装了一个1.12.2版本的Forge服务器。(关于一部分前期的教程,见我上一篇文章)
Passthem
2021/08/02
10K0
【Bug】CGLIB与JDK17不兼容,依赖失效,模块化报错问题及解决方式ClassFormatError: accessible: module java.base does not ‘opens
首先想到的是JDK版本过高,于是改用JDK8,依然报错,于是降低CJLIB版本依赖,再分别进行测试依旧报错。 
三三是该溜子
2025/01/13
5570
【Bug】CGLIB与JDK17不兼容,依赖失效,模块化报错问题及解决方式ClassFormatError: accessible: module java.base does not ‘opens
单元测试添加运行参数的maven插件
这里我们可以手动在idea运行启动配置,Run/Debug Configurations的窗口中
阿超
2023/12/16
5750
java10下编译lombok注解的代码
本文主要研究下在带有lombok(1.16.20版本)注解的代码在java10下的编译问题。
code4it
2018/09/17
1.3K0
Groovy枚举类初始化异常分析
之前写过一些Groovy重载操作符(终极版)的文章,中间用了内部的枚举类,然后通过一个static HPS getInstance(char c)方法获取不同的枚举对象,今天想着把中间的字符去掉,放在枚举类属性中。却发现了一个错误,又是一顿操作猛如虎,重启缓存二百五。
FunTester
2021/01/06
8490
SAPJCO3升级3.1后报错java.lang.UnsatisfiedLinkError: sapjco3.dll解决
SAPJCO官方站点 The SAP Java Connector 3.1 requires a JDK/JRE 8 or 11. In addition, the SAP Java Connector 3.1 running on Windows operating systems requires the Microsoft Visual Studio 2013 C/C++ runtime libraries to be installed on the system. JCO3.1版本需要8\11版本JRE,并需要安装MS VS2013 C++运行库
路过君
2020/06/19
1.4K0
springboot下使用rabbitMQ之开发配置方式(二)
消息参数传递在开发中也是个坑,不论使用内置的SimpleMessageConverter还是Jackson2JsonMessageConverter均无法让Consumer接收动态参数
上帝
2023/10/16
5970
springboot下使用rabbitMQ之开发配置方式(二)
java9 opens与exports的区别
序 本文主要研究下java9 opens与exports的区别 open及exports open open module 主要用于解决deep reflection问题,open的作用是表示该模块下的所有的包在runtime都允许deep reflection(包括public及private类型) 但是编译时期,仅仅允许该module中声明过exports的包可以访问,如果没有exports则该包的类在编译时期不可读 opens package 用于声明该模块的指定包在runtime允许使用反射访问 e
code4it
2018/09/17
4880
推荐阅读
相关推荐
解决报错:Could not set property 'id' of 'class com.north.domain.Book' with value '1787299433834786818' C
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验