服务和impl在单个osgi包中没有启动

时间:2016-04-25 13:32:16

标签: java osgi

我正在尝试编写一个osgi bunlde,它包含两个不同包中的service和serviceimpl类。 束

- packageA
      - service class
- packageB
      - service impl class

由于服务和服务impl在部署时都在同一个包中,因此我遇到了Missing约束错误。

注意:如果我将服务和服务impl放在不同的捆绑包中,它的工作正常。此外,如果我尝试从packageB导入packageA它工作正常。 由于两者都在同一个捆绑中,为什么我应该明确地导入它。它背后的原因是什么?

插件配置:

<plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>2.5.3</version>
        <extensions>true</extensions>
        <executions>
          <execution>
            <id>manifest</id>
            <phase>process-classes</phase>
            <configuration>
              <unpackBundle>true</unpackBundle>
              <manifestLocation>META-INF</manifestLocation>
              <instructions>
                <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
                <Bundle-Version>0.2.0-SNAPSHOT</Bundle-Version>
                <Export-Package>!${bundle.namespace}.internal.*,${bundle.namespace}.*;version="0.2.0-SNAPSHOT"</Export-Package>
                <Private-Package>${bundle.namespace}.internal.*</Private-Package>
                <_include>-osgi.bnd</_include>
                <_donotcopy>CVS|.svn|.git|.nfs*|~.nfs*|^.nfs*</_donotcopy>
                <Commit-Id>${buildNumber}</Commit-Id>
              </instructions>
            </configuration>
          </execution>
        </executions>
        <configuration>
          <unpackBundle>true</unpackBundle>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
            <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
            <Bundle-Version>0.2.0-SNAPSHOT</Bundle-Version>
            <Export-Package>!${bundle.namespace}.internal.*,${bundle.namespace}.*;version="0.2.0-SNAPSHOT"</Export-Package>
            <Private-Package>${bundle.namespace}.internal.*</Private-Package>
            <_include>-osgi.bnd</_include>
            <_donotcopy>CVS|.svn|.git|.nfs*|~.nfs*|^.nfs*</_donotcopy>
            <Commit-Id>${buildNumber}</Commit-Id>
          </instructions>
        </configuration>
      </plugin>

此处版本号在运行时生成

1 个答案:

答案 0 :(得分:0)

看起来您在Manifest中导入包但不导出它。 确保您还在Manifest中定义了Export-Package标头。

使用maven-bundle-plugin时,这应该会自动运行。