我目前在一个项目中,需要将PDE样式的插件转移到bnd样式的插件。 我遇到了外部jar的问题,因此我为每个jar建立了捆绑包,并将其包含在构建路径中。对于大多数广口瓶来说,这都可以正常工作,但是我得到了一个表现不如预期的瓶子。
org.apache.commons.codec.language。该软件包来自jar org.apache.commons.codec,它可以很好地解析(至少对于bndtools而言),但是当我运行捆绑包时,出现以下错误:
! could not resolve the bundles: [test-0.0.0 org.osgi.framework.BundleException: Could not resolve module: test [1]
Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"
]
! Failed to start bundle test-0.0.0, exception Could not resolve module: test [1]
Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"
org.osgi.framework.BundleException: Could not resolve module: test [1]
Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"
at org.eclipse.osgi.container.Module.start(Module.java:447)
at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:431)
at aQute.launcher.Launcher.startBundles(Launcher.java:519)
at aQute.launcher.Launcher.activate(Launcher.java:425)
at aQute.launcher.Launcher.run(Launcher.java:303)
at aQute.launcher.Launcher.main(Launcher.java:149)
在此github存储库中,我提取了一个会产生错误的参考:https://github.com/MaPhil/osgi-externals-test
我在这个主题上搜索了很多,但是最多的答案似乎是关于liferay或其他特定的库。希望任何人都能给我提示。
答案 0 :(得分:3)
一些好消息开始于:
Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"
这表明您的OSGi捆绑软件具有org.apache.commons.codec.language
的导入,并且它的版本范围(1.9到但不包括2.0)说明了您的构建路径未完全混乱上。
查看您的示例工作区,我看到您有一个用于包装Apache Commons Codec库的项目。对于您为什么要这样做,我有些困惑,因为Apache Commons Codec已经作为OSGi捆绑包在本地可用。如果要在工作空间中依赖它,则只需将其添加到现有存储库之一中即可。例如,在/cnf/central.maven
中,您可以添加:
commons-codec:commons-codec:1.9
参考Maven Central的正式版本。然后,您可以使用以下方法在bnd文件的构建路径中引用该捆绑软件:
-buildpath: org.apache.commons.codec
要运行您的应用程序,您应该真正创建一个bndrun
文件,您可以使用该文件来声明您的要求(在这种情况下,这是您对测试项目的要求),然后使用Resolve
操作(一个Bndtools中的按钮或Gradle任务)。这将获取您的-runrequirements
列表并创建-runbundles
的列表。最终看起来像这样:
-runrequirements: osgi.identity;filter:='(osgi.identity=test)'
-runfw: org.eclipse.osgi;version='[3.13.100.v20180827-1536,3.13.100.v20180827-1536]'
-runbundles: test;version="[0.0.0,0.0.1)",\
org.apache.commons.codec;version="[1.9.0,1.9.1)"
然后可以直接从该bndrun文件运行。它将启动框架并为您部署所有运行包。如果您使用的是Bndtools,那么它甚至可以使已部署的捆绑软件与Eclipse Workspace保持同步,从而使您始终可以部署最新的代码。
您可以查看有关如何进行此类操作的更多信息in the Bndtools documentation或相关详细信息in OSGi enRoute