Jay*_*yan 6 java cobertura classloader
我有类汇编实现IAssembly.
启动应用程序时看到以下错误
Caused by: java.lang.IllegalAccessError: class <Assembly > cannot access its superinterface <IAssembly>
at java.lang.ClassLoader.defineClass1(Native Method)
Run Code Online (Sandbox Code Playgroud)
汇编代码
class package.Assembly implements IAssembly {
}
Run Code Online (Sandbox Code Playgroud)
IAssembly
interface IAssembly { //note -this is not public, so uses default protected
}
Run Code Online (Sandbox Code Playgroud)
装配和IAssembly存在于两个不同的罐子中.两个罐子都由不同的类加载器加载.Assembly类加载在子类加载器中,IAssembly是父类.类加载器正在使用链接.
在正常情况下,这是有效的.在使用cobertura检测罐子后运行我的应用程序时发生错误.没有仪器,一切正常.cobertura仪器会导致这样的错误吗?或者这是一个等待被检测到的错误,但是对于cobertura,错误很快就会暴露出来.
通过使界面"公开",错误消失了.
在我看来,即使加载器被链接,封装保护也会因仪器和多个类加载器而失败.此javadoc Assembly与您的场景没有直接关系,但它确实描述了类似的场景:
也许检查哪个加载器正在找到您的检测类,并查看是否有办法同时从同一个类加载器加载IAssembly和Assembly加载.
| 归档时间: |
|
| 查看次数: |
7301 次 |
| 最近记录: |