在ServiceMix中部署Maven Built OSGi包:“捆绑中未解决的约束......”

时间:2011-02-02 10:18:56

标签: java osgi maven-2 apache-servicemix

我可以毫无问题地构建我的项目“samba.interfaces”和“samba.message”。但是当我尝试在ServiceMix中启动“samba.message”包时(需要包含de.samba.common包的“samba.interfaces”包),我收到以下错误:

Error executing command: Unresolved constraint in bundle message [195]: module; 
(&(bundle-symbolic-name=de.samba.common)(bundle-version>=0.0.1))

那么,用于的符号名称是什么?它必须与主包相同吗?这是POM的一部分,用于指定消息包:

<plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
             <version>2.2.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-Activator>de.samba.message.Activator</Bundle-Activator>
                    <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Name>SAMBA Message</Bundle-Name>
                    <Bundle-Version>1.0.0</Bundle-Version>
                    <Import-Package>
                        javax.jws,
                        javax.wsdl,
                        javax.xml.bind,
                        javax.xml.bind.annotation,
                        javax.xml.namespace,
                        javax.xml.ws,
                        META-INF.cxf,
                        META-INF.cxf.osgi,
                        org.apache.cxf.endpoint,
                        org.apache.cxf.bus,
                        org.apache.cxf.bus.spring,
                        org.apache.cxf.bus.resource,
                        org.apache.cxf.configuration.spring,
                        org.apache.cxf.resource,
                        org.apache.cxf.service.model,
                        org.apache.cxf.jaxws,
                        org.apache.cxf.transport.http_osgi,
                        org.springframework.beans.factory.config,
                        org.springframework.beans.factory.xml,
                        org.springframework.core.io,
                        org.springframework.beans.factory, 
                        org.springframework.context.support,
                        org.springframework.beans, 
                        org.springframework.context, 
                        org.osgi.framework,
                        org.apache.log4j,
                        de.samba.common.auditingcontrol.*,
                        de.samba.common.collect.*,
                        de.samba.common.message.*,
                        de.samba.common.repository.*,
                        de.samba.common.security.*,
                        de.samba.common,
                        *
                    </Import-Package>
                    <Export-Package>de.samba.message.*</Export-Package>
                    <Private-Package>

                    </Private-Package>
                    <!--
                    <DynamicImport-Package>*</DynamicImport-Package>
                    -->
                </instructions>

任何可能导致此错误的想法?

2 个答案:

答案 0 :(得分:0)

我对OSGI不太了解,但有以下观察。

documentation指定如何计算<Bundle-SymbolicName>。在他们的真实世界示例中,他们似乎没有projectId

<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>

答案 1 :(得分:0)

好的,我自己发现了这个问题。执行命令时出错:捆绑消息[195]中的未解决约束:模块; (&amp;(bundle-symbolic-name = de.samba.common)(bundle-version&gt; = 0.0.1))完全出乎意料,它来自src / main / resources / META-中的MANIFEST.MF文件如果您正在进行插件/ OSGi开发,通常会描述包信息的INF。似乎Maven BND插件包含该文件,并且仅在不存在时才生成新信息。

所以在删除src / main / resources / META-INF / MANIFEST.MF之后问题就解决了,所以插件可以生成正确的插件。