我正在尝试编写一个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>
此处版本号在运行时生成
答案 0 :(得分:0)
看起来您在Manifest中导入包但不导出它。 确保您还在Manifest中定义了Export-Package标头。
使用maven-bundle-plugin时,这应该会自动运行。