问题标签 [bndtools]

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 投票
3 回答
825 浏览

java - Bndtools:准备运行时环境的问题

我在 Eclipse 中安装了 Bndtools 并试用了他们的快速教程:http ://bndtools.org/tutorial.html

但是只要我想通过“运行 OSGi”按钮启动一个非常简单的组件,我就会收到一个启动错误提示:

Apache Felix Gogo Shell 以 OSGi 框架运行设置的某些配置启动,但错误仍然存​​在。我用 Eclipse Kepler 和 Lunar 以及 JDK 7 和 8 进行了尝试。

我不知道如何处理错误和警告。某处似乎缺少了什么。有谁知道如何解决这个问题?提前致谢!

0 投票
1 回答
1324 浏览

osgi - 如何使用 bndtools 在 OSGi 包中包含 xml 文件?

如何在不使用 maven 的情况下使用 bndtools 在 OSGi 包中包含 xml 文件?

0 投票
0 回答
45 浏览

bndtools - Bndtools 本地存储库视图为空

我正在使用带有 bndtools 的 Eclipse Luna。当我将捆绑包添加到“本地存储库”时,存储库视图为空。我看不到那里列出的捆绑包。

有什么解决办法吗?

0 投票
0 回答
176 浏览

java - 如何告诉 bndtools 解析不包括“可选要求”捆绑包?

在我的应用程序中,我使用 Felix SCR 进行服务管理。但是,SCR 导入了两个包(一个可传递),其中一个org.osgi.service.http用于启动我在运行时不需要的 HTTP 服务器。

我想从最终解决方案中删除这两个捆绑包。我该怎么做呢?我认为这是正在解析的 bnd 文件中的设置?

显示可选导入的解析结果

0 投票
1 回答
387 浏览

osgi - 多模块 Maven 项目上的 Bndtools

我目前正在将一个多模块 maven osgi 项目迁移到 bnd 工具。

我正在苦苦挣扎的是配置,build.bnd所以我可以构建捆绑包。

如果我将一个包添加到导出列表中,我会得到:

为导出的 1 个包查找源包时出错

并在细节中:

java.lang.NullPointerException

我理解这是由于目录布局,它是一个主文件夹,包括所有项目和列出所有模块的父 pom。所以基本上结构是

并且要构建的包是 maven 项目本身,每个项目都包含自己bnd.bnd定义的包

我已经使用 bndtools 在您创建新项目并选择所述选项时生成的所有项目将基本项目布局更改为 maven

然后我尝试编辑build.bnd并将目录更改为类似项目的内容:

而且我仍然无法构建。

我正在使用 Windows 7,在配置插件时已经遇到了路径问题,并且必须牢记这些问题。如果您使用 UI,bndtools 核心不适用于这些路径。

0 投票
1 回答
3509 浏览

osgi - 在 bndtools 中,是什么导致生成执行环境的 Require-Capability 标头?

我有以下 bnd 文件:

在生成的 MANIFEST.MF 中:

我不想要这个……我没有理由看到它应该是。那么我该如何避免呢?

0 投票
2 回答
104 浏览

java - 无法反序列化 bndtools osgi 项目中的 xml

我对 osgi 和 bndtools 相当陌生,并从 bndtools教程开始

本教程运行良好,然后我尝试使用我自己的测试项目来实现接口,在实现中,我试图使用org.simpleframework将 xml 文件反序列化为 java 类

我得到以下 classnotfound 异常。另外,我确实包含了包(有问题的类是其中的一部分)作为我正在运行的包中的私有包的一部分

java.lang.ClassNotFoundException:java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 的 packagename.classname。 net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org. simpleframework.xml.strategy.Loader.load(Loader.java:50) at org.simpleframework.xml.strategy.TreeStrategy.readValue(TreeStrategy.java:163) at org.simpleframework.xml.strategy.TreeStrategy.read(TreeStrategy. java:102) 在 org.simpleframework.xml.core.Source.getOverride(Source.java:370) 在 org.simpleframework.xml.core.Factory.getConversion(Factory.java:207) 在 org.simpleframework.xml.core.ObjectFactory.getInstance(ObjectFactory.java:63) 在 org.simpleframework.xml.core.Composite 的 org.simpleframework.xml.core.Factory.getOverride(Factory.java:139) .read(Composite.java:141) 在 org.simpleframework.xml.core.Composite.readVariable(Composite.java:687) 在 org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) 在 org. simpleframework.xml.core.Composite.readUnion(Composite.java:610) at org.simpleframework.xml.core.Composite.readElement(Composite.java:593) at org.simpleframework.xml.core.Composite.readElements(Composite. java:506) 在 org.simpleframework.xml.core.Composite.readSection(Composite.java:388) 在 org.simpleframework.xml.core.Composite.read(Composite.java:367) 在 org.simpleframework.xml.core .Composite.read(Composite.java:234) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在 org.simpleframework.xml.core.Traverser .read(Traverser.java:92) at org.simpleframework.xml.core.CompositeList.populate(CompositeList.java:175) at org.simpleframework.xml.core.CompositeList.read(CompositeList.java:148) at org. simpleframework.xml.core.Composite.readVariable(Composite.java:682) at org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) at org.simpleframework.xml.core.Composite.readUnion(Composite. java:610) 在 org.simpleframework.xml.core.Composite.readElement(Composite.java:593) 在 org.simpleframework.xml.core.Composite.readElements(Composite.java:506) 在 org.simpleframework.xml.core .Composite.readSection(Composite.java:388)在 org.simpleframework.xml.core.Composite.readDefault(Composite.java:262) 在 org.simpleframework.xml.core.Composite .read(Composite.java:232) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在 org. simpleframework.xml.core.Composite.readVariable(Composite.java:687) at org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) at org.simpleframework.xml.core.Composite.readUnion(Composite. java:610) 在 org.simpleframework.xml.core.Composite.readElement(Composite.java:593) 在 org.simpleframework.xml.core.Composite.readElements(Composite.java:506) 在 org.simpleframework.xml.core .Composite.readSection(Composite.java:388)在 org.simpleframework.xml.core.Composite.readDefault(Composite.java:262) 在 org.simpleframework.xml.core.Composite .read(Composite.java:232) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在 org. simpleframework.xml.core.Traverser.read(Traverser.java:92) at org.simpleframework.xml.core.CompositeList.populate(CompositeList.java:175) at org.simpleframework.xml.core.CompositeList.read(CompositeList. java:148) 在 org.simpleframework.xml.core.Composite.readVariable(Composite.java:682) 在 org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) 在 org.simpleframework.xml.core .Composite.readUnion(Composite.java:610) 在 org。simpleframework.xml.core.Composite.readElement(Composite.java:593) at org.simpleframework.xml.core.Composite.readElements(Composite.java:506) at org.simpleframework.xml.core.Composite.readSection(Composite. java:388) 在 org.simpleframework.xml.core.Composite.read(Composite.java:367) 在 org.simpleframework.xml.core.Composite.readDefault(Composite.java:262) 在 org.simpleframework.xml.core .Composite.read(Composite.java:232) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在org.simpleframework.xml.core.Traverser.read(Traverser.java:92) 在 org.simpleframework.xml.core.Persister.read(Persister.java:632) 在 org.simpleframework.xml.core.Persister.read( Persister.java:613) 在 org.simpleframework.xml.core.Persister。在 org.simpleframework.xml.core.Persister.read(Persister.java:528) 在 org.simpleframework.read(Persister.java:550) 在 org.simpleframework.xml.core.Persister.read(Persister.java:550) 读取(Persister.java:591) .xml.core.Persister.read(Persister.java:433) 在 com.mlsm.implementation.MLSMImpl.parseMLSM(MLSMImpl.java:150) 在 com.mlsm.implementation.MLSMImpl.executeInternal(MLSMImpl.java:84) 在com.mlsm.implementation.MLSMImpl.parseAndExecute(MLSMImpl.java:182) 在 com.mlsm.implementation.MLSMImpl.start(MLSMImpl.java:65) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect。 NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.felix.dependencymanager.ServiceImpl.invoke(ServiceImpl.java:484) 在 org.apache.felix.dependencymanager.ServiceImpl.access$000(ServiceImpl.java:44) 在 org.apache.felix 的 org.apache.felix.dependencymanager.ServiceImpl.activateService(ServiceImpl.java:441)。 dependencymanager.ServiceImpl$3.run(ServiceImpl.java:125) at org.apache.felix.dependencymanager.SerialExecutor$1.run(SerialExecutor.java:47) at org.apache.felix.dependencymanager.SerialExecutor.scheduleNext(SerialExecutor.java: 84) 在 org.apache.felix.dependencymanager.SerialExecutor.execute(SerialExecutor.java:68) 在 org.apache.felix.dependencymanager.ServiceImpl.calculateStateChanges(ServiceImpl.java:147) 在 org.apache.felix.dependencymanager.ServiceImpl .start(ServiceImpl.java:257) 在 org.apache.felix.dependencymanager.DependencyManager.add(DependencyManager.java:56) 在 com.mlsm.implementation。Activator.init(Activator.java:24) 在 org.apache.felix.dependencymanager.DependencyActivatorBase.start(DependencyActivatorBase.java:76) 在 org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)在 org.apache.felix.framework.Felix.activateBundle(Felix.java:2152) 在 org.apache.felix.framework.Felix.startBundle(Felix.java:2070) 在 org.apache.felix.framework.BundleImpl.start (BundleImpl.java:976) 在 aQute.launcher.Launcher.update(Launcher.java:422) 在 aQute.launcher.Launcher.activate(Launcher.java:346) 在 aQute.launcher.Launcher.run(Launcher.java: 235)在aQute.launcher.Launcher.main(Launcher.java:92)SecureAction.startActivator(SecureAction.java:645) at org.apache.felix.framework.Felix.activateBundle(Felix.java:2152) at org.apache.felix.framework.Felix.startBundle(Felix.java:2070) at org .apache.felix.framework.BundleImpl.start(BundleImpl.java:976) 在 aQute.launcher.Launcher.update(Launcher.java:422) 在 aQute.launcher.Launcher.activate(Launcher.java:346)。 launcher.Launcher.run(Launcher.java:235) 在 aQute.launcher.Launcher.main(Launcher.java:92)SecureAction.startActivator(SecureAction.java:645) at org.apache.felix.framework.Felix.activateBundle(Felix.java:2152) at org.apache.felix.framework.Felix.startBundle(Felix.java:2070) at org .apache.felix.framework.BundleImpl.start(BundleImpl.java:976) 在 aQute.launcher.Launcher.update(Launcher.java:422) 在 aQute.launcher.Launcher.activate(Launcher.java:346)。 launcher.Launcher.run(Launcher.java:235) 在 aQute.launcher.Launcher.main(Launcher.java:92)第346章)在aQute.launcher.Launcher.run(Launcher.java:235)第346章)在aQute.launcher.Launcher.run(Launcher.java:235)

这就是在 service start() 中所做的

还有一点需要注意的是,这段代码在 osgi 框架之外也能正常工作。让我知道更多信息是否有助于调试问题。

我也读了这篇文章,但仍然对手头的问题感到困惑。

编辑:所以我发现只有当 xml 有一个看起来像这样的元素时才会发生这种情况

有任何想法吗?

谢谢

0 投票
0 回答
63 浏览

osgi - 无法将我的 bndtools osgi 项目移动到另一台机器\计算机

我的工作区中有几个 bndtools 项目(一个是接口,另一个是实现)。

将这两个项目移动到不同机器\计算机中的工作区的最佳方法是什么?我知道直接复制粘贴不起作用,但我仍然
1.尝试复制粘贴项目 - 不起作用
2.尝试从 eclipse 导入项目 - 不起作用

0 投票
1 回答
3752 浏览

apache-felix - OSGi 和传递依赖

我正在为我的 OSGi 项目使用 Felix 框架,但我遇到了一个关于第三方依赖项的严重问题。

我正在使用 eclipse 和 maven-bundle-plugin 从源代码和 POM.XML 文件中的 MANIFEST.MF 生成我的包。到目前为止,一切都很好。但是,当我的包中有一些第三方依赖项时,我发现自己正在寻找一个无限的 JAR 列表,这些 JAR 通常不是包,并将它们放在我的 /bundle Felix 目录中,直到不再缺少依赖项。

我将此过程称为“下载 Internet 以使我的 OSGi 应用程序正常工作”。

我究竟做错了什么?当然我一定做错了什么,因为我无法想象任何人拥有一个依赖于 B 的捆绑 A,然后依赖于 C 和 D,然后这两个将依赖于其他几个等等......去寻找所有这些依赖项都使用 google 或 maven Central 手动完成!这太疯狂了!

自动化的正确方法是什么?我很想拥有以下两种解决方案之一:

1) 能够创建一个嵌入了所有依赖项的大型 JAR 文件,但只导出我想要的包,而且,更确切地说,不导入任何包。

2)(我的首选解决方案)有一​​种方法可以将我的所有依赖项放入单独的 JAR 文件中,我可以简单地将其粘贴到 /bundle 目录中。

3)(甚至更受欢迎)有一种方法可以使用第三方 JAR,而无需将 8GB 的​​依赖项下载到我的项目中。

我找到了可以做到这一点的工具,但仅适用于直接(一级)依赖项,而传递依赖项则由我手动解决。

这个问题很关键。缺乏这样的工具阻碍了 OSGi 的使用。搜了搜搜了搜,PAX、bndtools、朋友之类的101个解决方案都遇到过,但是好像都没有解决这个问题……</p>

请帮我。如果可以的话,请提供一个活生生的例子,世界各地像我这样的人将从这个问题的解决方案中受益。

谢谢!

-

-

编辑:我附上了一个示例项目,我在其中尝试使用 JScience,但生成的 JAR 包一直要求我提供新的 Imports,即它不是独立的。

示例链接:https ://www.dropbox.com/s/svo3nu3vawvv2xn/RequireJscienceExample.zip?dl=0

我通常尝试使用 Eclipse 将 3rd 方 JAR 转换为包,但他们总是必须导入我没有的包,所以正如你所说,这是一个无穷无尽的情况。

我找不到任何关于 maven-bundle-plugin 的标签 Conditional_Package 的文档。然而,相关搜索向我展示了我之前尝试过但没有成功的内联选项。

我创建了一个基本项目,其中我有一个使用 JScience 库的类,在它的 POM.XML 中我有以下内容:

我是说 maven 内联所有不是来自 osgi 框架本身的包。看看生成的 JAR,它看起来相当不错,我现在只嵌入了包而不是整个 JAR(但是在我看来,我不需要所有这些内联包,因为我只使用了其中两个)。此外,如果我打开 MANIFEST.MF 文件,我可以看到这个有问题的行:

说我缺少 org.joda.convert 和 org.xml.sax。

令我惊讶的是,我们正在谈论一个声明与 OSGi 兼容的库(JScience):http: //jscience.org/

我错过了什么?我真的不能不使用 JScience。而且我之前拒绝了几个 3rd 方库,因为这些 OSGi 3rd 方集成困难,这可以节省我的开发时间。

0 投票
1 回答
775 浏览

java - 如何避免让 bnd 从 Bundle-ClassPath 创建 Private-Package 条目?

我正在尝试创建一个包含 jar 及其所有依赖项(大约 20 个其他 jar)并公开我自己设计的接口的包。我不想为所有依赖项创建捆绑包,因为我想创建一个包含整个混乱的“密封组件”。

显示问题的示例 bnd 文件如下所示

(这只是一个示例......在现实世界中,Bundle-Classpath 中有大约 20 个条目)最后一行是问题所在。Include-Resource 条目会将包装好的 jar 及其所有依赖项吸到包中,效果很好。但是,将所有 jar 添加到 Bundle-ClassPath 会导致 bnd 将它们添加到 Private-Package。通常我不会在意,除了包含的 jar 中有这么多包以至于 bnd 文件变得巨大,并且 bndtools 试图创建它时爆炸了。

我尝试手动创建 Private-Package 并将其放入 bnd 文件中,但 bnd 只是覆盖它。