尝试启动捆绑时遇到问题。
项目结构:
--Main project
- sub project 1
- sub project 2
src/main/java/util
- sub project 3
- bundle project 1
- bundle project 2
- bundle project 3
当我在eclipse中使用Maven install命令编译主项目时,它已成功编译。所以,为了测试bundle,我已经下载了felix发行包。我成功安装捆绑包但我无法启动。我得到的错误依赖无法解决 这是我的捆绑pom文件
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Export-Package>
com.test.sub_project_3.step,
com.test.sub_project_3.step2
</Export-Package>
<Import-Package>*
org.osgi.framework,
org.osgi.util.tracker,
com.test.sub_project_2.util
</Import-Package>
<Embed-Dependency>
slf4j-api;scope=compile
</Embed-Dependency>
<Bundle-Activator>com.test.sub_project_3.osgi.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
我收到错误&#34; com.test.sub_project_2.util无法解析&#34;。 com.test.sub_project_2它的编辑和包装名称它也是正确的,但我仍然不明白为什么我会收到错误。
答案 0 :(得分:0)
您必须了解OSGi和Maven是不同的工具,具有不同的包解析策略。 在设计时,使用maven策略。您在POM文件中指明您的依赖项。此外,在您的情况下,您使用了maven捆绑插件,因此您可以限制捆绑包(您的import-package部分)需要在运行时导入哪个包。因此,在您的情况下,所有依赖项都在设计时出现,因为您的项目已编译。但这并不意味着运行时分辨率将起作用,因为在运行时使用了OSGi分辨率。
在您的情况下,错误消息表明您部署的软件包无法在运行时中找到com.test.sub_project_2.util以便执行。这是因为OSGi发行版中不存在捆绑包。因此,您可以捆绑包含该包的项目并将其部署到OSGi发行版中。如果这样做,程序包现在可以在运行时使用。
以一种简单的方式,你可以用这种方式思考这个问题:用于你的bundle的类路径在设计和运行时是不同的。你不能假设它们之间存在因果关系。
此致