无法在maven包中解析导入包

时间:2017-05-29 12:13:10

标签: java maven maven-bundle-plugin

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

项目结构:

--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它的编辑和包装名称它也是正确的,但我仍然不明白为什么我会收到错误。

1 个答案:

答案 0 :(得分:0)

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

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

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

此致