繁体   English   中英

使用repast的项目中jdk-17上的IllegalAccessError

[英]IllegalAccessError on jdk-17 in a project using repast

currently I am working on a java project that uses the repast java library (repast.jar, colt.jar and trove.jar). 该项目适用于 jdk-11,但目前,我正在尝试迁移到 jdk-17,但由于下一个异常,我无法运行该项目:

Exception in thread "main" java.lang.IllegalAccessError: class com.go.trove.classfile.AccessFlags tried to access private method 'void java.lang.reflect.Modifier.<init>()' (com.go.trove.classfile.AccessFlags is in unnamed module of loader 'app'; java.lang.reflect.Modifier is in module java.base of loader 'bootstrap')
    at com.go.trove.classfile.AccessFlags.<init>(AccessFlags.java:75)
    at com.go.trove.classfile.ClassFile.<init>(ClassFile.java:160)
    at com.go.trove.classfile.ClassFile.<init>(ClassFile.java:138)
    at uchicago.src.sim.util.ByteCodeBuilder.generateBasicAction(Unknown Source)
    at uchicago.src.sim.engine.ActionUtilities.createActionFor(Unknown Source)
    at uchicago.src.sim.engine.ScheduleBase.scheduleActionBeginning(Unknown Source)
    at uchicago.src.sim.engine.ScheduleBase.scheduleActionBeginning(Unknown Source)

我记得在最近版本的 java 中读到过,反射 API 发生了一些变化。 这会是一个可能的原因吗?

知道如何解决它吗? 这很难解决吗?

非常感谢!

是的...

Tea / Trove 项目是原始开发人员(迪士尼公司)未维护的古老代码。 https://github.com/teatrove/teatrove的 Github 上有叉子……但自 2013 年以来也没有任何活动。 没有希望。

至于你的问题。 看来最初的设计者决定将java.lang.reflect.Modifier org.teatrove.trove.classfile.Modifiers的子类。

问题是Modifier曾经有一个默认public构造函数……但在 Java 17 中,他们声明了一个私有的无参数构造函数……因此默认构造函数不再存在。 这意味着当 Trove 尝试创建一个Modifiers实例时,它会失败。

解决此问题的一种方法是修改 Trove,使Modifiers不再是Modifier的子类。 我不知道这有多可行。 可行性将取决于代码库是否利用ModifiersModifier的子类型这一事实。 那是让你去调查...

如果您采用这种方法,请做一个好公民,并将您的更改作为拉取请求提交给 Github 上的“TeaTrove”代码库。

另一种方法是在您的应用程序中寻找 Trove 依赖项的替代品。 同样,在不知道您如何/为什么使用 Trove 的情况下,很难提出替代方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM