问题标签 [osgi-bundle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
class - OSGi 重启:是否考虑修改的类文件?
OSGi-Bundle 在重新启动时是否考虑其更改的类文件?我的意图是停止一个 Bundle,更改它的 java 文件,编译它,然后重新启动该包。它是否包含新类,还是我需要以某种方式更新捆绑包?
这两个线程让我想出了这个想法: Editing/Modifying a .java file programmatically? (不是 .class 文件)以及 如何以编程方式编译和实例化 Java 类?
很高兴得到帮助。谢谢。
apache-camel - 无法在 servicemix 中启动捆绑包
我有一个捆绑包在 Servicemix 中运行。我去了我公司的存储库并将相应的 JAR 下载到我的本地机器上。我提取了那个 JAR,发现这个 JAR 只有一个文件夹 META-INF。在这个文件夹中,有一个 Manifest.mf 文件和我的资源,例如 Spring 配置文件和 Camel Context 文件。我得到了我的第一个问题:这个 JAR 的源文件在哪里,即 JAVA 类和所有文件。我只看到清单文件、pom.xml、另一个 pom 属性文件以及 spring 和 camel 的其他几个配置文件。
这导致了我的下一步。我的工作区中也有这个项目的本地副本。我在本地构建了这个项目,并在项目的目标目录中找到了 JAR。
现在以下步骤可能看起来很愚蠢,但无论如何我做了很少的实验。我提取了我在目标中找到的这个 JAR 并提取它以查看内容。我相信它是一个包,因为我使用了 maven-bundle-plugin,而且你无法通过查看 JAR 来判断它只是一个 JAR 或 OSGI 包。好的,所以我提取了 JAR 并猜测这次它确实有编译的 java 类。
这还没有结束,我又做了一件傻事。我从这个 JAR 中删除了已编译的类,并使它与我从公司的中央存储库中复制的完全相同。现在我使用 JDK 的 JAR 创建实用程序来创建 JAR。
现在我有两个 JARS:一个是我从公司的中央仓库下载的。另一个我自己创造的。它与另一个具有完全相同的内容。我什至在创建这个 JAR 时使用了相同的 manifest.mf。(因为我知道 Manifest 是 oSGI Bundle 的主干)。
我将这个捆绑包安全地复制到了我的服务器的主目录中。最后,我使用以下方法在 Servicemix 中安装了这个 Bundle/JAR:安装文件:path_to_JAR/JAR_FILE_NAME。
它安装成功。但是当我试图启动这个包时。它无法启动。通过使用显示异常,我看到了异常:它无法加载 bean 并且无法初始化应用程序上下文,然后是更具体的异常“ClassNotFound”异常。我知道它无法找到在我的应用程序上下文中定义的类。但是为什么?
我做了完全相同的步骤,我检查了很多次。如果我的无法启动,为什么较早的启动并运行。
对于在 OSGI 环境中工作过的其他人来说,这可能听起来很傻,但现在我开始重新考虑特别是 ServiceMix。
感谢您的任何建议。
osgi-bundle - Servicemix Bundle 安装目录
我有一个捆绑包在 Servicemix 中运行了很长时间。我什至不能使用“历史”来查看这个包是从哪里安装的。
有什么办法可以找到这个捆绑包最初是从哪里安装的?
注意:这个包确实存在于我公司的中央存储库中,但我没有看到确切的版本。似乎这个包是使用文件组件安装的,比如安装文件:jar_location/jar_name。
java - dependencies.dependency.version' 缺少错误
我正在尝试使用 apache maven 创建一个包。当我运行mvn clean install
命令时,它给出以下错误:
javax.servlet:servlet-api.jar 缺少 dependencies.dependency.version'
我已将“servlet-api.jar”放在项目的资源文件夹中
谁能告诉我应该把那个jar文件放在哪里?
更新:这是我的 pom.xml
谢谢安德森
osgi-bundle - OSGi 依赖管理
我正在使用 OSGi 部署捆绑 Apache Felix 容器。我有一个 maven 项目(~100bundles)并使用 maven-scr-plugin 生成清单文件和 DS 描述符,我有一个类似于下面描述的代码的问题。在没有将所有提供程序都注入 ClassA 之前,我需要不激活 ClassB(如果有一个不接触 ClassA 的解决方案,那就太好了,但这是可能的)。在 ClassB 调用它的激活方法后,Provider2 被添加到 ClassA,这就是为什么我在输出中获得“默认”值的原因。如果我稍后触发打印方法,它会按预期工作。
如果有人使用过 OSGi,请提供建议。先感谢您。
捆绑2:
捆绑3:
捆绑4:
输出是:
jetty - 自动启动 OSGI 包
我正在创建一个在 Eclipse 之外运行的无头 OSGI 服务器。我使用 Jetty 作为我的 Servlet 容器,并使用 Equinox 作为我的 OSGI 容器。我正在使用org.eclipse.equinox.http.jetty
捆绑包将 Jetty 添加到 OSGI。如果我从osgi>
提示中手动启动 jetty 和 org.eclipse.equinox.http.registry,这一切都会正常运行。但是,我希望它在无人值守的情况下运行,因此我需要在 OSGi 启动时自动(或至少以编程方式)加载这些包。我该怎么做呢?
换句话说,我如何自动启动 OSGI 包?
java - osgi 导出实现以进行继承
根据我在不同地方阅读的最佳实践(一个示例),将 API 和实现分开是理想的,但也只在 API 包中导出包而不是在实现包中导出包,而实现包应该注册为服务。
但是我仍然不清楚你应该如何扩展一个具体的类。在我看来,能够做到
impl 捆绑包需要公开com.foo
AFAIU只有两种方式
- 导出具体实现,但这违反了最佳实践
- 永远不要从不同的包中扩展类。即将所有类型层次结构捆绑在一起。在我看来,这种方式违背了模块化框架的意义
那么这样做的正确方法是什么?
java - 不生成 OSGI-INF 文件夹
我是 OSGI 的新手。我一直无法在生成的 jar 文件中获取 OSGI-INF 文件夹。我需要有如下文件夹结构
- 元信息
- OSGI-INF
- com.mine.cq
我正在使用 Eclipse 和 m2e 插件。当我运行我的项目时,我得到了 BUILD SUCCESS。我在生成的 jar 文件中得到了以下文件夹结构。
- 元信息
- com.mine.cq
这是我的 POM.xml
为什么 OSGI-INF 文件夹不在 .jar 文件中?我需要在 OSGO-INF 文件夹中设置一些信息,因为我必须将我的组件注册为 OSGI 服务。请指导我完成它。
activemq - Kar 文件删除保留功能
我正在打包一个应用程序以通过 .kar 文件部署到 Karaf 中。我注意到,即使在我从部署文件夹中删除了 .kar 文件后,仍然安装了许多相关功能(在我的示例中来自 activemq 和 camel)。
这是预期的行为吗?我曾预料到部署是完全可逆的。
我的功能文件如下所示:-
删除 .kar 文件后,我只剩下:-
谢谢,
J。
maven-2 - 从 Maven2 到 OSGI 包
我想在 OSGI 包中转换一个 Maven2 项目。我正在尝试使用应该根据 maven 依赖项创建清单的maven-bundle-plugin 。问题是我无法让它工作。当我安装并运行生成的包时,总是会出现如下错误:
每次我在 maven-bundle-plugin 中手动添加缺少的约束。但总是有另一个缺失的约束。现在我被困在无法以任何方式添加的 com.sun.javadoc 上。无论如何...我不能手动添加所有的包!请问你有更好的主意吗?谢谢
===更新===
没有在导出标签中添加任何内容,运行 bundle 给我的第一个错误是: