我在类里面实现IAssembly。
启动应用程序时出现以下错误
Caused by: java.lang.IllegalAccessError: class <Assembly > cannot access its superinterface <IAssembly>
at java.lang.ClassLoader.defineClass1(Native Method)
汇编代码
class package.Assembly implements IAssembly {
}
大会
interface IAssembly { //note -this is not public, so uses default protected
}
程序集和IAssembly存在于两个不同的jar中。这两个 jar 都由不同的类加载器加载。 Assembly类在子类加载器中加载,IAssembly是父类。类加载器正在使用链接。
在正常情况下,这是可行的。使用cobertura插入jar后,运行我的应用程序时会发生错误。没有仪器,一切正常。 Cobertura仪器会引起这种错误吗?或无论如何这都是一个等待检测的错误,但是使用cobertura可以迅速暴露该错误。
通过将接口(interface)设置为“公共(public)”,错误消失了。
最佳答案
在我看来,即使装入器被链接,程序保护和多个类装入器的包保护也会失败。此java.lang.instrument.Instrumentation上的javadoc与您的方案没有直接关系,但确实描述了一个类似的方案:
也许检查哪个加载器正在找到您检测的类,并查看是否有一种方法可以从同一个类加载器中同时获取Assembly
和IAssembly
。