0

尝试启动捆绑包时遇到问题。

项目结构:

--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 命令编译主项目时,它已成功编译。所以,为了测试包,我下载了 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>

我收到“ com.test.sub_project_2.util 无法解决”的错误。com.test.sub_project_2 它被编译并且包名称也是正确的,但我仍然不明白为什么我会出错。

4

1 回答 1

1

您必须了解 OSGi 和 Maven 是不同的工具,在包解析方面具有不同的策略。在设计时,使用 maven 策略。您在 POM 文件中指出您的依赖关系。此外,在您的情况下,您使用了 maven bundle plugin ,因此您可以限制在运行时需要通过您的 bundle 导入哪个包(您的 import-package 部分)。因此,在您的情况下,所有依赖项都存在于设计时,因为您的项目已编译。但这并不意味着运行时解析会起作用,因为在运行时使用了 OSGi 解析。

在您的情况下,错误消息表明您部署的包在运行时无法找到com.test.sub_project_2.util 以便执行。这是因为 OSGi 发行版中没有包提供包。因此,您可以捆绑包含该包的项目并将其部署在您的 OSGi 发行版中。如果你这样做,包现在在运行时可用。

以一种简单的方式,您可以这样认为这个问题:用于您的包的类路径在设计和运行时是不同的。你不能假设它们之间存在因果关系。

问候

于 2017-05-29T13:05:21.860 回答