我在类里面实现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与您的方案没有直接关系,但确实描述了一个类似的方案:

也许检查哪个加载器正在找到您检测的类,并查看是否有一种方法可以从同一个类加载器中同时获取AssemblyIAssembly

10-04 21:05