[英]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
的子類。 我不知道這有多可行。 可行性將取決於代碼庫是否利用Modifiers
是Modifier
的子類型這一事實。 那是讓你去調查...
如果您采用這種方法,請做一個好公民,並將您的更改作為拉取請求提交給 Github 上的“TeaTrove”代碼庫。
另一種方法是在您的應用程序中尋找 Trove 依賴項的替代品。 同樣,在不知道您如何/為什么使用 Trove 的情況下,很難提出替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.