我有類Assembly實現IAssembly。IllegalAccessError:類<classname>無法訪問其超級界面<interfacename>
啓動應用程序時
Caused by: java.lang.IllegalAccessError: class <Assembly > cannot access its superinterface <IAssembly>
at java.lang.ClassLoader.defineClass1(Native Method)
彙編代碼
class package.Assembly implements IAssembly {
}
IAssembly
interface IAssembly { //note -this is note public, so uses default protected
}
大會和IAssembly在兩個不同的罐子存在我看到下面的錯誤。兩個jar都由不同的類加載器加載。 Assembly類是在子類加載器中加載的,IAssembly是父類。類裝載機正在使用鏈接。
在正常情況下,這是有效的。在使用cobertura裝入罐子後運行我的應用程序時發生錯誤。沒有儀器,所有工作正常。 cobertura儀器會導致這樣的錯誤嗎?或者這是一個等待被發現的錯誤,但與cobertura錯誤很快就暴露出來了。
通過使接口「公開」,錯誤消失。
爲什麼你需要使用不同的類加載器加載罐子?您的應用程序如何部署/運行?通常最好將所有東西打包在一起(對於簡單的應用程序),或者通過類似於EJB的JNDI和RMI來訪問。我親自把你的界面和你的班級放在同一個罐子裏。但那只是我。 –
對我來說,這個消息導致了一個類路徑問題,其中一個'package_example'被定義爲這樣:'A/package_example/classA','B/package_example/classB'。當然,'A'和'B'必須位於類路徑中才能正常工作。 –