问题标签 [osgi-fragment]

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.

0 投票
2 回答
586 浏览

java - Eclipse RCP - 使用片段提供翻译

我有一个关于在 Eclipse RCP 中使用 Fragments 的简短问题。目前我正在使用消息机制来翻译我的字符串。Messages.java 和 *.properties 文件位于我的插件中,一切正常。现在我想为不同的客户使用不同的字符串/翻译。据我所知,插件片段是一个可能的解决方案。我读过无法使用片段覆盖主机插件中的文件。所以我想我必须使用 2 个不同的片段来提供正确的 *.properties 文件。下图显示了我认为必须使用的架构。

主机片段使用

配置片段项目后(设置了主机插件并且 *.properties 文件位于与主机相同名称的包中),我想通过 Eclipse IDE 启动我的 RCP 应用程序。2 个运行配置也已配置。使用 OSGI 控制台时,我看到我的片段存在并且已解决。

但我的问题是没有使用提供的来自片段的字符串/翻译。每次我启动应用程序时,都会使用一些旧的字符串/翻译(在将属性文件移动到片段之前使用的那个)。

有人知道我做错了什么以及我的解决方案是否正确吗?

提前致谢 :)

0 投票
1 回答
177 浏览

osgi - 当bundle与其片段之间的类重复时,类加载器如何

我对OSGI片段有一些误解,

假设我部署了一个包含两个类“com.company.C1”和“com.company.C2”的包“B”,其中C1 使用C2。然后,我为主机包“B”部署了一个片段“F”,其中 F 仅包含一个类“com.company.C2”(对第一个类的代码稍作更改)

现在,如果正在执行类“com.company.C1”,将使用哪个类(文件)“com.company.C2”,来自“B”还是来自“F”?

同一个类加载器中存在两次相同的类 C2 会导致运行时错误(相同版本和不同版本)吗?

0 投票
1 回答
537 浏览

java - 在 OSGi 扩展包中注册服务

我正在玩 OSGi 框架扩展包以便完全理解它们。在查看了 OSGi R6 规范(3.15 和 4.2.4.1)之后,我成功地调用了ExtensionBundleActivator. 现在我正在尝试在此类激活器中注册服务。但是,当我尝试使用此类服务​​时,引用注释无法连接该服务。

这是我的代码('已经更改了捆绑包的名称,但这没关系):

这是此类扩展包的清单:

消费包(包的一部分):

我的问题是:我做错了什么?为什么消费者检测不到扩展包的注册服务?或者,也许我只是在做框架禁止的事情……在这种情况下,不可能从扩展包中提供服务吗?如何与扩展包中的代码进行交互(也就是访问扩展包本身的内容)?

这里有一些注意事项:

  1. 我使用 felix 作为 OSGi 实现;
  2. “ExtensionBundleExample”和“BundleExample”都加载在 felix 的自动进程文件夹中(默认的是“bundle”,但我调整了config.properties使用“corebundles”文件夹;
  3. 输出正确显示“启动扩展包激活器!” 但是当显示 的引用时actualBundleExample,输出显示“null”;
  4. BundleExample 的可选基数用于测试目的:我只想调用消费者组件具有的“激活器”方法(以便查看System.out.println控制台;
  5. 从我之前的问题中,我了解到扩展包是 OSGi 框架中的一个小众市场,但我仍然想了解它们:我发现互联网上缺乏关于这个主题的示例非常烦人;

感谢您的回复!

0 投票
1 回答
2045 浏览

osgi - java.lang.ClassCastException:com.sun.xml.internal.ws.client.sei.SEIStub 无法转换为 org.apache.cxf.frontend.clientproxy AEM OSGi

我正在尝试在 AEM 的 osgi 环境中使用fuelsdk。我收到此错误 -

java.lang.ClassCastException:com.sun.xml.internal.ws.client.sei.SEIStub 无法转换为 org.apache.cxf.frontend.ClientProxy

这是因为 OSGi 在嵌入了fuelsdk 依赖项的包之前加载了系统包。捆绑包得到解决;此错误发生在运行时。

如何强制 OSGi 类加载器在运行时选择 org.apache.cxf.frontend.ClientProxy 而不是 com.sun.xml.internal.ws.client.sei.SEIStub?

我可以使用'uses'指令的组合吗?和/或导入/导出包?

有人建议我使用 -

我想知道我应该在 factory.setServiceClass() 中使用哪个类;

我应该在 factory.setAddress() 中使用哪个地址;是端点地址吗?-- https://webservice.s6.exacttarget.com/Service.asmx

非常感谢帮助谢谢

0 投票
0 回答
335 浏览

java - Eclipse 产品导出:片段错误(未找到主机插件)

我在Eclipse RCP 3.8.2 IDE中有一个工作区,其中包含 3 个插件和 2 个片段:

  • P1 和 P2 插件
  • BONECP1 片段(P1 是主机)
  • BONECP2 片段(P2 是 HOST)
  • MAIN 插件(需要 P1 和 P2)

在 IDE 中运行 MAIN 插件的生活很顺利......但是在导出 MAIN 插件(作为 Eclipse RCP 产品)时,片段 BONECP2 会导致此错误:

示例图像

有任何想法吗?提示:

  1. 片段是克隆的(类路径库是相同的!)
  2. 有时(如果在 BONECP1 片段中更改了某些配置)BONECP2 片段无法找到已加载并存在于主机中的某些类。重新配置BONECP1片段(使其不再是单例/单例)解决了这个问题!!
  3. 如果再次尝试导致错误的操作,则找到之前未找到的类!(导出版本和 IDE 内部)
  4. 删除 BONECP2 片段的HOST MINIMUM VERSION解决了​​ EXPORT 错误...但是 BONECP2 片段找不到一些已加载并存在于 HOST 中的类!

我对片段的理解缺少什么?为什么 Eclipse 可以在 IDE 中使用此配置而不是在导出时?

这是 BONECP 片段的清单:

0 投票
1 回答
196 浏览

java - OSGI:使用片段中另一个包中的代码

我想将一个 OSGI 片段添加到一个包中,这里是“org.eclipse.equinox.http.jetty”,其中 Manifest.mf 如下所示:

不幸的是,我的代码需要在其他包中定义的代码,在“org.eclipse.jetty.io”中。所以我将以下行添加到清单中:

现在 - 在 Eclipse 中 - 代码编译。但是当我启动应用程序时,我得到以下异常(MyJettyCustomizer是片段中的一个类,由片段主机“org.eclipse.equinox.http.jetty”中的代码每次反射使用):

如果我从清单中删除需要“org.eclipse.jetty.io”的代码MyJettyCustomizer并再次从清单中删除“Import-Package:org.eclipse.jetty.io”行,则运行时没有异常并且类MyJettyCustomizer是正确的加载。

那么有没有可能我可以在 OSGI 片段中使用来自另一个包的代码?

0 投票
1 回答
886 浏览

osgi - Felix:无法在 JDK 9 上添加扩展包

迁移到 JDK 9+ 后,我们围绕 apache Felix 构建的 OSGi 容器开始无法安装扩展包。错误信息是:

我们的 Felix 版本是 5.6.10,这是目前可用的最新版本。捆绑清单的相关部分:

0 投票
1 回答
487 浏览

osgi - OSGI 上的 AspectJ LoadTimeWeaving

我正在尝试借助 Equinox jars(org.aspectj.runtime、org.aspectj.weaver、org.eclipse.equinox.weaving.aspectj on bundles 文件夹和 org.eclipse)在 OSGI 上使用 aspectJ Load Time Weaving(无 Spring) .equinox.weaving.hook 位于与 org.eclipse.osgi 物理位置相同的文件夹)根据:https ://wiki.eclipse.org/Equinox_Weaving_QuickStart

这是捆绑包的加载顺序:

我想知道我应该如何启动钩罐?我会很感激任何帮助... ps有人通过将包“org.eclipse.osgi”和片段“org.eclipse.equinox.weaving.hook”作为“带有链接内容的二进制项目”导入他的工作区来解决他的问题,但我不太确定该怎么做: https ://www.eclipse.org/forums/index.php?t=msg&th=440862

感谢您的回复

0 投票
1 回答
2201 浏览

java - org.osgi.framework.BundleException:无法解析模块:org.eclipse.jetty.plus

从 Karaf 缓存日志中,当我在 karaf 中部署捆绑包时,我多次收到以下错误

0 投票
1 回答
84 浏览

groovy - 从 Groovy 2.4 升级到 2.5 时由于“无法启动片段包”而解决 OSGi 测试?

这是在 OSGi 中运行时如何将 groovy-all 从 2.4 升级到 2.5的后续问题?. 在 Groovy 的 2.5 版中,该groovy-all工件不再作为 jar 文件提供,因此上述答案中的建议是改用单独的 jar 文件。我有一个使用Pax Exam的测试用例,如下所示

兴趣点是:

现在我想升级到 Groovy 2.5.6,所以我将上面的行替换为:

但是现在当我重新运行测试时,出现以下错误:

我该如何解决这个问题?