java – 捆绑OSGi依赖库的标准方法是什么?

我有一个项目引用了许多开源库,一些是新的,一些不是那么新.也就是说,它们都是稳定的,我希望坚持我选择的版本,直到我有时间迁移到更新的版本(我昨天测试了hsqldb 2.0并且它包含许多api更改).

我希望嵌入的其中一个库是Jasper Reports,但是你们肯定知道,它带有一大堆支持jar文件,我只需要一个山的子集(已知)因此我打算自定义捆绑所有我的依赖库.

所以:

>每个人都为他们正在使用的开源库定制自己的Osgi包,还是有Osgi版本的公共库的主要来源?
>另外,我认为我的每个捆绑包只是简单地将它们的依赖罐嵌入捆绑包本身就会简单得多.这可能吗?如果我选择在一个包中嵌入第三方foc库,我假设我需要生成2个jar文件,一个没有嵌入式库(用于通过类路径通过标准类加载器加载的库),以及一个包含的osgi版本嵌入式库,因此我应该选择这样的包名<< myprojectname>> – << subproject>> -osgi-.1.0.0.jar?
>如果我无法嵌入开源库并选择自定义捆绑开源库(通过bnd),我应该选择一个唯一的捆绑名称以避免与可能的官方捆绑包发生冲突吗?例如<< myprojectname>> – <<< 3rdpartylibname>> – <<< 3rdpartylibversion>> .jar?
>我的非Osgi启用项目当前通过Service.providers(…)扫描各种插件罐中的meta-inf文件夹来扫描自定义插件.如果我去Osgi,这个机制还能运作吗?

最佳答案
我宁愿不嵌入依赖的罐子(是的,这是可能的).它会导致两个问题,

1)没有重用此代码.许多捆绑包可能只是做同样的事情(嵌入相同的jar),你最终安装了多次相同的jar.您可以争辩说,您的软件包也可以导出嵌入式jar的接口,但这很难看,因为它不应该是您的捆绑责任来公开该代码.它还使得公开多个版本的库或同一版本的多个提供者更容易.

2)这是Eclipse特定的 – 嵌入式jar在开发环境中无法正确解析(仍然在运行时工作).我的捆绑包可能依赖于我的目标平台中的捆绑包,并且它将无法解析嵌入式jar中的元素,必须将它们导入工作区才能工作.

我发现大多数开源罐已经很好了bundled by the nice folks at Spring.还有其他的repos可用,但不幸的是我丢失了他们的链接.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?
Java菜单驱动程序以检查数字类型
使用Junit的Maven项目 - 检查银行账号
JAVA编程基础
在Java中使用throw、catch和instanceof来处理异常
在Java中,将数组分割为基于给定查询的子数组后,找到子数组的最大子数组和
如何在Java中从给定的字符串中删除HTML标签?
在PHP中,IntlChar getBlockCode()函数的翻译如下:
如何在Android中实现按下返回键再次退出的功能?
如何使用Java中的流式API解析JSON字符串?
Java中的模式类