在OSGi下使用SnakeYaml的java? 1 月,3 周 Questions & Answers 1433 SnakeYaml是否在OSGi框架内工作?我已经修改了舱单&;这样,它就可以正确部署,但尝试将文档加载到JavaBean对象结构中失败,出现“未找到类”异常 谢谢
# 1 楼答案 对于任何偶然发现这一点的人来说,snakeyaml的新版本已经是一个osgi包了。无需修改文件清单。MF 您必须像这样使用CustomClassLoaderConstructor: import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor; CustomClassLoaderConstructor constructor = new CustomClassLoaderConstructor(this.getClass().getClassLoader()); Config config = new Yaml(constructor).loadAs(in, Config.class); 用org测试代码。亚马尔。蛇毒;捆绑版本=“1.25.0”
# 2 楼答案 有时,它就像添加清单头一样简单,以使jar在OSGi沙箱中发挥良好的作用。有时,JAR/库在OSGi的上下文中做一些“顽皮”的事情。由于OSGi使用类加载器的方式,黄金法则是避免使用“Class.forName()”,否则在单个类加载器环境中完全有效。我下载了SnakeYaml的源代码,它们是基于bean的加载器,利用了类。forName 好消息是,似乎有一个构造函数CustomClassLoaderConstructor,让您使用自己的类加载器,在创建核心Yaml解析器对象时使用它。关键是获得正确的类装入器。您需要使用使用Yaml的包的类加载器,但需要确保将要创建的任何类都导入到该包中。导入将确保所有需要的对象都位于OSGi创建的类加载器树中 See this questionfor基于bundle创建了一个类加载器
# 1 楼答案
对于任何偶然发现这一点的人来说,snakeyaml的新版本已经是一个osgi包了。无需修改文件清单。MF
您必须像这样使用CustomClassLoaderConstructor:
用org测试代码。亚马尔。蛇毒;捆绑版本=“1.25.0”
# 2 楼答案
有时,它就像添加清单头一样简单,以使jar在OSGi沙箱中发挥良好的作用。有时,JAR/库在OSGi的上下文中做一些“顽皮”的事情。由于OSGi使用类加载器的方式,黄金法则是避免使用“Class.forName()”,否则在单个类加载器环境中完全有效。我下载了SnakeYaml的源代码,它们是基于bean的加载器,利用了类。forName
好消息是,似乎有一个构造函数CustomClassLoaderConstructor,让您使用自己的类加载器,在创建核心Yaml解析器对象时使用它。关键是获得正确的类装入器。您需要使用使用Yaml的包的类加载器,但需要确保将要创建的任何类都导入到该包中。导入将确保所有需要的对象都位于OSGi创建的类加载器树中
See this questionfor基于bundle创建了一个类加载器