我刚刚开始使用OSGI开发,并且正在努力理解如何最好地处理依赖JAR。 即如果我正在创build一个捆绑包,可能性是我需要使用一些第三方JAR。 当我创build我的捆绑JAR部署到OSGI,显然这些第三方JAR不包括在内,因此捆绑将不会运行。 我明白,有一个select是将这些JAR打包,并将它们部署到OSGI容器。 但是,如果他们只需要使用一捆,这似乎并不理想。 什么是最好的解决scheme? JAR是否可以embedded到捆绑JAR中?如果是的话,这是一个合理的方法吗?
本主题将介绍如何将OSGI框架转换为在android上运行。 然后,它提供了将android包转换为OSGI包的能力,可以调用android API。 在目前阶段,这些Android OSGI捆绑软件无法做的唯一事情就是操纵活动并使用资源和资产。 我一直在努力解决这个限制。 我希望在这个问题上有好消息。 我发现在Eclipse中使用Create Plugin项目工具比在OSGI包中转换标准的android包更加困难,所以我不会多说这个。 您可以在本邮件末尾的“日志”部分中logging我的成就。 我指的是Knopflerfish项目,因为它是我工作的基础。 这些修改是为了在Knopflerfish OSGi android项目上执行,但实际上适用于其他OSGI框架。 不需要修改OSGi框架本身,我们只会更新Knopflerfish发行版tool目录下的项目KfServiceLib和KfBasicApp 。 添加基本的Android支持捆绑 function和限制 这是android框架的第一级定制。 这些更改将与上下文或调用线程无关,但它们允许使用像android.util.Log这样有限的一组android API类。 由于这些变化,bundle将能够在他们的原型和实现中使用android类。 尽pipe如此,由于缺less强制性参考,它们将无法与graphics用户界面,内容提供者和系统服务等相关。 Knopflerfish应用程序中的更改 就像它们一样,tools / android / apk下的应用程序能够在android上执行OSGi框架,但前提是bundle只调用java类。 对于作为Knopflerfish框架一部分的捆绑包,情况就是这样,但是想要调用android API的自定义捆绑包是什么? 以下是在框架中进行的更改,以启用parsingandroid类的bundle。 首先,android包必须是框架包的一部分,以便解决。 这是OSGi属性org.osgi.framework.system.packages.extra的目的 在创build框架之前将属性设置为要导出的android包列表,然后进行设置。 注意野生字符android.*似乎没有效果:我们必须像下面一样一个一个的告诉每个包。 在文件src / org / knopflerfish / android / service / KfApk.java中添加到KfServiceLib static final String ANDROID_FRAMEWORK_PACKAGES = ( "android," + […]
我有一些使用Groovy来解释脚本的包。 清单Import-Package指令看起来像这样: Import-Package: groovy.util;version="[1.8,2)" 上面的版本范围清楚地表明,导入版本必须在1.8(含)和2.0(含)之间。 当我在只安装了Groovy 1.8.6的OSGi环境中运行这个包时,它按预期工作…当我inputinspect package requirement 4 ,它会打印: -> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages: —————————————————————— ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1] groovy.util; version=1.8.6 -> groovy-all [5] 这正如我所料,当我要求CodeRunner解释这个Groovy片段时: GroovySystem.version 它正确返回1.8.6 。 现在,当我开始安装Groovy 1.8.6和2.3.3的OSGi环境的时候,当我检查我的包的包,我得到这个: -> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages: —————————————————————— ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1] groovy.util导入消失了(尽pipeMANIFEST仍然有它,当然)! 而现在,当我运行GroovySystem.version我获得了2.3.3,而不是1.8.6! 这是疯狂的东西,它似乎只是一个新的版本的Groovy的事实是打破了OSGi的承诺,我应该能够使用任何版本的依赖我想要的。 我已经在Felix和Equinox中testing了这个结果。 我也在清单中使用了一个精确的版本,而不是一个范围,但是这并没有改变任何东西。 任何人都可以看到究竟是怎么回事? PS。 如果你不相信我,试试下面的GitHub项目: https : //github.com/renatoathaydes/osgi-run/tree/next/osgi-run-test/ipojo-dosgi
我如何在Scala中编写我的包,然后将其部署到OSGI容器中? 首先将它编译成“java”,还是我可以将scala直接部署到OSGI中,并使用某种捆绑来识别它? 任何指针都会很棒。 目前我使用的是Apache Felix作为我的osgi容器,但是对通用概念的简单解释足以让我开始。
在OSGi下,组件和服务之间的主要区别是什么? 据我所知,所有的服务必须是组件,但不是所有的组件都必须是服务。 使用示例用例的优点是什么?
什么使模块/服务/应用程序function成为OSGi模块的特别好select? 我有兴趣在我的应用程序中使用OSGi 。 我们是一个Java商店,我们广泛使用Spring,所以我倾向于使用OSGi(tm)服务平台的Springdynamic模块 。 我正在寻找一种将OSGi稍微join到应用程序中的好方法。 有没有人在这里使用过这个或类似的OSGi技术? 有什么陷阱吗? @尼古拉斯 – 谢谢,我已经看到了一个。 这是一个很好的教程,但我正在寻找更多关于如何做我的第一个“真正的”OSGi包,而不是一个Hello World示例的想法。 @david – 感谢您的链接! 理想的情况是,在一个绿色的应用程序,我会devise整个事情是dynamic的。 但是,我现在要找的是将其引入现有应用程序的一小部分。 假设我可以select任何应用程序,有什么因素可以使OSGi豚鼠变得更好或更糟?
我对Apache Karaf究竟是什么感到有点困惑。 你能否说Apache Karaf包含以下内容: Apache Felix(这是OSGi 4.2框架的实现) Apache白羊座(这是Blueprint标准的实现)
OSGi允许通过Import-Package来确定依赖关系, Import-Package只连接一个包(从任何包导出)和Require-Bundle ,它连接到特定的命名包的导出。 在构build一个新的OSGi应用程序时,我应该使用哪种方法来表示依赖关系? 大多数捆绑包都是内部的,但是对外部(开源)捆绑包会有一些依赖关系。
我正在使用maven和eclipse将我的项目转换为OSGI包。 Maven构build的东西就好,只有我现在在Eclipse中得到上述错误。 我怎样才能找出哪个项目导致这个? 有没有特别的观点或什么? 这怎么能发生,我希望maven能够检测循环依赖? 更新 好的,我在这里和这里find了一些东西 这可能是由felix maven-bundle-plugin导致的,每个导出都会导入吗?
我刚开始听到OSGi这个术语的使用(在阅读常见的Java EE容器如GlassFish和Spring的教程时),但是我一直无法find一个简单,直接,易于理解的解释OSGi是像我这样的企业新手会理解的。 有人可以提供这样的防伪解释吗? 也许有一些例子,甚至代码摘录? 谢谢!