Closed seaHeater closed 6 years ago
@seaHeater ark plugin 和 ark biz 是两层模型,参考 https://alipay.github.io/sofastack.github.io/docs/ ark plugin 只能委托给 plugin 相互加载类,即 ark plugin 只看的到其他 ark plugin 的导出类,不能委托 ark biz加载类。 ark biz 运行在 ark plugin 之上,默认情况下,ark biz能看到ark plugin所有的导出类。如果ark plugin使用了spring类,但是没有导出。那么这个ark plugin和ark biz使用的spring 类必然是不同的类加载器加载,导致报LinkageError等错误。
如果把spring相关包打入到 ark plugin,需要确认一点,ark biz使用这个ark plugin的时候,spring相关的类确保是同一个类加载器加载。有两个解决方案:
@seaHeater 先关了,如果有其他问题可以重新打开。
感谢你提供的方案,问题已经得到了解决~~
Your question
ark plugin导出类中的spring特性被屏蔽
Your scenes
对内提供了一个基础包,希望可以解决其他项目maven引入后,可能出现的依赖冲突问题。
使用sofa-ark的步骤: 1.将基础包打包成ark plugin,导出需要的类; 2.spring-boot项目引入ark plugin和sofa-ark-springboot-starter,打成ark包; 3.执行2生成的可执行包
结果: 1.不涉及到spring的类能正常通过PluginClassLoader加载; 2.使用spring相关特性的类,会出现以下几类错误和异常: 1)ArrayStoreException(Application监听器) 2)ClassCastException(Condition注解) 3)java.lang.LinkageError(get bean)
Your advice
对于需要打包成ark plugin导出的类,如果用到了spring特性,spring-boot项目引入这样的插件,有没有什么比较好的解决方案
Environment
java -version
):1.8.0uname -a
):mac High Sierra