Karaf加载OSGI包错误prolog中不允许内容

时间:2013-07-04 23:46:45

标签: xml osgi apache-karaf

我正在尝试将一个示例OSGI包部署到我在Karaf中加载的本地maven repo并收到错误

karaf@root> features:addurl mvn:io.spray/on-karaf/1.2-M8
[Fatal Error] :1:1: Content is not allowed in prolog.
Error executing command: Unable to add repositories:
    Content is not allowed in prolog.

这是我的features.xml文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="io.spray.examples.karaf">
    <feature name="io.spray.examples.karaf" version="1.2-M8">
        <bundle>mvn:io.spray/on-karaf/1.2-M8</bundle>

        <bundle>mvn:com.typesafe.akka/akka-osgi_2.10/2.2.0-RC2</bundle>
        <bundle>mvn:com.typesafe/config/1.0.1</bundle>
        <bundle>wrap:mvn:com.chuusai/shapeless_2.10.0-RC5/1.2.3</bundle>
        <bundle>mvn:org.parboiled/parboiled-core/1.1.5</bundle>
        <bundle>mvn:org.parboiled/parboiled-scala_2.10/1.1.5</bundle>
        <bundle>mvn:org.scala-lang/scala-library/2.10.0</bundle>
        <bundle>mvn:org.scala-lang/scala-reflect/2.10.0</bundle>
        <bundle>mvn:io.spray/spray-util/1.2-M8</bundle>
        <bundle>mvn:com.googlecode.concurrentlinkedhashmap/concurrentlinkedhashmap-lru/1.3.2</bundle>
        <bundle>mvn:io.spray/spray-caching/1.2-M8</bundle>
        <bundle>mvn:io.spray/spray-http/1.2-M8</bundle>
        <bundle>mvn:io.spray/spray-io/1.2-M8</bundle>
        <bundle>mvn:io.spray/spray-can/1.2-M8</bundle>
        <bundle>mvn:org.jvnet.mimepull/mimepull/1.9.2</bundle>
        <bundle>mvn:io.spray/spray-httpx/1.2-M8</bundle>
        <bundle>mvn:io.spray/spray-routing/1.2-M8</bundle>

        <bundle>wrap:mvn:io.spray/spray-json/1.2.5</bundle>
    </feature>
</features>

这里是MANIFEST.MF

Manifest-Version: 1.0
Implementation-Vendor: io.spray
Implementation-Title: on-karaf
Implementation-Version: 1.2-M8
Implementation-Vendor-Id: io.spray
Specification-Vendor: io.spray
Specification-Title: on-karaf
Implementation-URL: http://spray.io
Specification-Version: 1.2-M8

我认为我的MANIFEST.MF可能不正确,这可能是原因吗?我是Karaf,OSGI和maven的新手,所以我错过了一个重要的步骤。

3 个答案:

答案 0 :(得分:1)

功能:addUrl行错了。 mvn:io.spray / on-karaf / 1.2-M8 指向JAR,因此在其上使用addurl将尝试解析jar文件,就好像它是XML一样。如果feature.xml位于JAR文件中,则必须直接引用XML:

features:addurl mvn:io.spray/on-karaf/1.2-M8/xml/features

http://fusesource.com/docs/esb/4.2/deploy_osgi/DeployFeatures-Create.html

答案 1 :(得分:0)

我在参加会议时遇到过这个错误。问题是那里的wlan路由器需要使用Web表单进行身份验证。我打开了wlan但未经过身份验证。因此,对于每个网址,表格都会回来。

添加功能或安装捆绑包时,可能会导致使用无效内容。 在我的情况下,甚至最糟糕的是,maven正在缓存maven回购中的一些无效内容。所以即使我的wlan再次工作,我也不得不删除这些文件。

您可以通过在maven控制台中的功能网址上执行cat来检查是否发生了此问题:

cat mvn:io.spray / on-karaf / 1.2-M8

答案 2 :(得分:0)

您必须将项目打包设置为pom而不是(默认)jar,以便资源直接放在存储库中,而不是放在jar中。加 <packaging>pom</packaging>到你的maven pom,重新部署,你应该没事。 (在卡拉夫,执行features:addurl mvn:io.spray/on-karaf/1.2-M8/xml/features。)这至少对我有用。