簡體   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