【问题标题】:Import package can not be resolved in maven bundlemaven bundle 中无法解析导入包
【发布时间】:2017-10-29 17:55:35
【问题描述】:

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

项目结构:

--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 它被编译并且包名也是正确的,但我仍然不明白为什么我会出错。

【问题讨论】:

  • 你在eclipse中打开了包名“com.test.sub_project_2.util”的proget?

标签: java maven maven-bundle-plugin


【解决方案1】:

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

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

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

问候

【讨论】:

  • com.test.sub_project_2.util 是 Jar 项目,我想在捆绑中使用它。那么如何在 bundle 中使用 JAR 项目呢?
  • 你有几个选择: - 创建一个项目,将 jar 打包成一个包并部署这个包,我认为这个解决方案对 OSGi 更友好。 - 从导入包部分删除 com.test.sub_project_2.util 并修改嵌入依赖部分,以便将包嵌入到您自己的 jar 中。 (如果您将 compile 添加到提供包的依赖项中,像 *;scope=compile;inline=true 这样的东西会起作用)。更多的互联网搜索将为您提供详尽的解决方案列表。
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 2021-03-18
  • 2012-08-31
  • 1970-01-01
  • 2012-10-11
  • 2021-06-27
  • 2012-05-07
  • 2020-02-21
相关资源
最近更新 更多