我目前正在为karaf开发捆绑包并提出一些问题......
我写了一个基于cxf的bundle/webservice,我尝试在karaf中部署它,但它无法启动该bundle,因为它无法解析某些包,例如
org.osgi.framework.BundleException:bundle org.springframework.aop中未解决的约束[56]:无法解析56.0:缺少需求[56.0]包; (&(包= org.aopalliance.aop)(版本> = 1.0.0)(!(版本> = 2.0.0)))
所以这是一个问题,这个包依赖来自spring-aop(3.1.0.RELEASE),那么问题出在哪里?缺少什么依赖?我该如何解决这些问题?
在那种情况下,我并不清楚地了解开发过程.我应该在部署中部署所有丢失的捆绑包吗?因为我想保留第三方库,从我开发的捆绑包中取出.我必须部署哪些捆绑包?这是一个试错过程吗?有没有一种常见的方法让maven做依赖性的东西?
我发现了一个文件夹"system",并在文档中读到它是一个像maven这样的存储库,是否适用于这些功能?
我为测试用例提供了一些带有一些预先部署的捆绑包的karaf,并将我的webservice捆绑到其中,但同样是例外...
引起:java.lang.ClassNotFoundException:javax.servlet.http.HttpServlet
缺少什么依赖?
我已经阅读过关于camel和karaf的教程,但它没有解释部署内容,所以有人能建议我一个好的教程吗?
谢谢!克里斯
我试图通过OSGi(特别是Karaf)使用Jersey.为此,我从Maven 下载了这个捆绑jar并将其放入我的Karaf部署目录中.但是,当我尝试启动捆绑包时,它无法解决任何依赖性.它似乎也在寻找每个依赖的版本0.0.0,这似乎是错误的.
将此捆绑包放入我的项目的最佳方法是什么?您是否必须手动下载所有依赖项,或者我是否可以使用具有此捆绑包的现有OBR?我在哪里可以找到这个?
我在2.2.8版本的Karaf上遇到了问题(很可能也是早期版本).
我将使用Karaf来使用动态部署的bundle来托管系统.捆绑包由用户部署,我不知道他们是谁.
我希望BundleActivator.start()的顺序与bundle之间的包依赖性(导入/导出包的依赖性)完全对应,并计划在bundle1将要启动之前假设bundle0将被完全初始化是可以安全的. .但事实并非如此 - 似乎BundleActivator.start()以"随机"顺序调用,并忽略了bundle之间的包依赖关系.
示例用例,我有3个库
test-lib0 - defines testlib0.ITestRoot, exports testlib0 package
test-lib1 - defines testlib1.TestRoot implements ITestRoot, exports testlib1 package
test-lib2 - uses both libs, ITestRoot and TestRoot
Run Code Online (Sandbox Code Playgroud)
当Karaf启动时,我在控制台中看到以下示例输出
karaf@root> TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
TestLib0Activator.start()
Run Code Online (Sandbox Code Playgroud)
但我希望它应该始终按此顺序排列
TestLib0Activator.start()
TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
Run Code Online (Sandbox Code Playgroud)
我正在附加测试样本项目.测试用例:在"mvn install"之后将jar从./deploy文件夹移动到Karaf的同一文件夹,跟踪消息应该出现在控制台中.(注意:它可能在第一次尝试时正常工作,再尝试一次:))
样本测试项目 http://karaf.922171.n3.nabble.com/file/n4025256/KarafTest.zip
注意:这是来自http://karaf.922171.n3.nabble.com/What-is-the-natural-start-order-for-dependent-bundle-td4025256.html的交叉帖子
我正在尝试配置jetty以在Apache Karaf OSGI容器中使用SSL.http有效,但https不起作用.可能是什么问题呢?
我的配置详情如下:
等/的jetty.xml
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host">
<Property name="jetty.host" />
</Set>
<Set name="port">
<Property name="jetty.port" default="8282" />
</Set>
<Set name="maxIdleTime">300000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">20000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
<Arg>
<New class="org.eclipse.jetty.http.ssl.SslContextFactory">
<Set name="KeyStore">/opt/keystore</Set>
<Set name="KeyStorePassword">password</Set>
<Set name="KeyManagerPassword">password</Set>
<Set name="TrustStore">/opt/keystore</Set>
<Set name="TrustStorePassword">password</Set>
</New>
</Arg>
<Set name="port">8443</Set>
<Set name="maxIdleTime">30000</Set>
</New>
</Arg>
Run Code Online (Sandbox Code Playgroud)
在/etc/org.ops4j.pax.web.cfg文件中输入
org.ops4j.pax.web.config.file=${karaf.home}/etc/jetty.xml
Run Code Online (Sandbox Code Playgroud) 我想在Karaf上安装两个捆绑包.对于其中一个捆绑我得到错误,当我看到捆绑:diag我收到以下消息.在日志中也同样适用.类似的bundle已经部署,它具有相同的依赖关系.第一个工作正在工作,但第二个工具包我得到低于错误.有什么想法吗?
opendaylight用户@根>束:DIAG
状态:GracePeriod Blueprint 2/10/16 6:07 PM缺少依赖项:(objectClass = org.osgi.service.http.HttpService)
2016-02-10 23:54:07.113 GMT + 00:00 [蓝图扩展器:3]错误oaabcBlueprintContainerImpl - 由于未解析的依赖关系,无法启动bundle com.xyz.videosdn.tesweb的蓝图容器[(objectClass = org.osgi. service.http.HttpService)] java.util.concurrent.TimeoutException:null at org.apache.aries.blueprint.container.BlueprintContainerImpl $ 1.run(BlueprintContainerImpl.java:336)[org.apache.aries.blueprint.core:1.4 .0] at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[org.apache.aries.blueprint.core:1.4.0]
当尝试在命令行中使用karaf中的install命令将我的应用程序安装为osgi包时,一切似乎都很好.当我输入start(id)时,一切似乎都很好,但我的应用程序似乎不接受请求.当我输入log:display时,我得到了这个:
2016-04-20 13:49:38,251 | INFO | Thread-19 | bundle | 37 - org.apache.aries.spifly.dynamic.bundle - 1.0.1 | Bundle Considered for SPI providers: oms-integrations
2016-04-20 13:49:38,251 | INFO | Thread-19 | bundle | 37 - org.apache.aries.spifly.dynamic.bundle - 1.0.1 | No 'SPI-Provider' Manifest header. Skipping bundle: oms-integrations
Run Code Online (Sandbox Code Playgroud)
我是新手,我不知道这意味着什么("没有'SPI-Provider'Manifest标题.")或者如何解决它?
我的问题实际上是标题:您建议在 Apache Karaf 中运行 Spring 4 应用程序吗?
如果没有,为什么不呢?如果这样做,如何进行?
容器、MVC 和数据就是所需要的。我过去已经在没有 OSGi 的情况下做过很多次了。对于 Karaf,我尝试了许多配置、清单、类路径和捆绑包。总是遇到奇怪的麻烦。最后让我想知道 Spring 是否仍然应该在 OSGi 中运行。如果是的话,有什么办法让它发挥作用?
因此我向有知识的人提出问题。:-)
我是Apache karaf和OSGI的新手。我试图编写并运行一个非常简单的捆绑软件。但是启动该捆绑包时出现此错误:
错误执行命令:错误执行捆绑软件命令:无法解决karaf [86](R 86.0):缺少要求[karaf [86](R 86.0)] osgi.wiring.package; (osgi.wiring.package = bundle)未解决的要求:[[karaf [86](R 86.0)] osgi.wiring.package; (osgi.wiring.package = bundle)]
我的pom是:4.0.0
<groupId>com</groupId>
<artifactId>karaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>karaf Bundle</name>
<description>
karaf OSGi bundle project.
</description>
<properties>
<maven-bundle-plugin.version>2.5.4</maven-bundle-plugin.version>
<osgi.version>6.0.0</osgi.version>
</properties>
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>${osgi.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${maven-bundle-plugin.version}</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-Activator>bundle.Activator</Bundle-Activator>
<Export-Package>
bundle*;version=${project.version}
</Export-Package>
<Import-Package>
org.osgi.framework,*
</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
我的manifest.mf文件在这里。
> Manifest-Version: 1.0
Bnd-LastModified: 1394131053386
Bundle-Copyright: Copyright (c) OSGi Alliance (2000, 2014). All Rights …
Run Code Online (Sandbox Code Playgroud) 我正在创建一个将在 Karaf 上运行的 Spring Boot 应用程序。我试图在 Karaf 中公开项目配置属性,以便能够使用 config:property-set 更改属性,而无需重新部署应用程序。
因此,我已成功配置我的 karaf 功能以将属性公开给 Karaf,但我正在尝试创建一个 OSGi 组件,以便能够在使用 config:property-set 更改属性时获取更新。
我在尝试安装 .kar 文件时遇到的错误如下:
[[A2019-05-19T23:09:32,926 | INFO | pipe-kar:install file:/Users/nikos/development/interlink/thirdParty/osgi-karaf-spring-boot-demo/osgi-spring-boot-demo-features/target/osgi-spring-boot-demo-features-0.0.1-SNAPSHOT.kar | KarServiceImpl | 35 - org.apache.karaf.kar.core - 4.1.3 | Added feature repository 'mvn:com.nemesis/osgi-spring-boot-demo-features/0.0.1-SNAPSHOT/xml/features'
2019-05-19T23:09:32,927 | INFO | pipe-kar:install file:/Users/nikos/development/interlink/thirdParty/osgi-karaf-spring-boot-demo/osgi-spring-boot-demo-features/target/osgi-spring-boot-demo-features-0.0.1-SNAPSHOT.kar | FeaturesServiceImpl | 9 - org.apache.karaf.features.core - 4.1.3 | Adding features: osgi-spring-boot-demo-feature/[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]
2019-05-19T23:09:32,995 | WARN | pipe-kar:install file:/Users/nikos/development/interlink/thirdParty/osgi-karaf-spring-boot-demo/osgi-spring-boot-demo-features/target/osgi-spring-boot-demo-features-0.0.1-SNAPSHOT.kar | KarServiceImpl | 35 - org.apache.karaf.kar.core - 4.1.3 | Unable to install Kar feature osgi-spring-boot-demo-feature/0.0.1.SNAPSHOT
org.osgi.service.resolver.ResolutionException: …
Run Code Online (Sandbox Code Playgroud) 我一整天都在做这件事,但在尝试了这么多组合后却没有让它发挥作用。归根结底,我正在寻找从 Karaf 获取 JSON 日志记录的明确步骤列表。我什至浏览了 Maven Karaf 插件源代码,试图解决这个问题,尽管也许我看的还不够远。
我正在使用 Karaf 4.2.6。我正在尝试使用 karaf-maven-plugin 版本 4.2.6 构建 Karaf 部署。
如果我将layout.type
各种附加程序更改为JsonLayout
,我会得到一个堆栈跟踪,指出它无法加载 JSON 布局,因为我缺少一个类。java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider
。
我查看了 jar org.ops4j.pax.logging/pax-logging-log4j2/1.10.2
,发现我需要 3 个 Jackson jar,Core v2.8.7、Annotations v2.8.0 和 Databind v2.8.7。
etc/startup.properties
我一直在尝试以 5 或 8 的启动级别获取这些文件,以便它们org.ops4j.pax.logging/pax-logging-log4j2/1.10.2
在启动时做好准备。我确保它们位于system
文件夹中的正确位置。大多数时候,如果我确实将它们放入etc/startup.properties
,它们的起始级别为 30。我将它们放置在具有正确起始级别的功能中,但它们要么在使用任何内容后就开始很好,startup.properties
要么根本没有出现。我尝试了很多可能的组合,,,,startupBundles
但startupFeatures
没有bootFeatures
任何结果startup.properties
。我无法弄清楚内容是如何startup.properties
生成的。有时,我想要的应用程序功能甚至无法启动,因为如果我只是将这些 jar 的引用放在 中,则有关配置的某些内容在设置日志记录时被阻止startup.properties
,例如
mvn\:com.fasterxml.jackson.core/jackson-core/2.8.7 = 5
下面是我的 pom.xml,其中注释掉了之前尝试的一些内容:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" …
Run Code Online (Sandbox Code Playgroud) apache-karaf ×10
osgi ×8
osgi-bundle ×4
maven ×2
apache-aries ×1
apache-felix ×1
java ×1
jersey ×1
jetty ×1
jetty-8 ×1
json ×1
log4j2 ×1
logging ×1
obr ×1
opendaylight ×1
spring ×1
spring-data ×1
spring-mvc ×1
ssl ×1