如何在IntelliJ IDEA中避免“包未被捆绑依赖项导出”错误?

10

我使用CQ5原型创建了一个新的Maven项目,并将其导入到IntelliJ IDEA中。 IntelliJ会标记一些类的用法,例如org.apache.felix.annotations.Componentorg.apache.felix.annotations.Reference等, 并显示以下错误消息:

The package is not exported by the bundle dependencies

IntelliJ OSGi Error Message

  1. 这是一个合法的错误吗?
  2. 我该如何修复它(而不是禁用检查)?
6个回答

3

您是否将这些包作为捆绑定义的一部分进行导出? 在maven项目中,您应该使用maven bundle插件,并定义<Export-Package>your.packages.here</Export-Package>。 这些包是否包含在该定义中? 如果没有,这些服务实际上将不可用于OSGi。


大家好,我的所有包都已正确定义,并且使用Maven成功构建了项目。然而,当我使用IntelliJ IDEA查看我的代码时仍然遇到相同的问题。有什么想法吗? - Drake .C
首先,尝试在Intellij中重新构建您的项目。我发现Intellij项目文件可能会损坏,并且它们无法成功修复自己。对于这些包,我还相信最新版本的AEM现在正在使用略有不同的接口。 - Brenn
我已经尝试过了,但仍然得到了这些烦人的建议。由于我的代码可以正常运行,我已经更改了设置以忽略它们。谢谢。 - Drake .C

3
我正在使用12.1.4版本。
1. 错误似乎是合理的。我在ACQ 5.6.1 Doc中找不到该软件包。 2. 我关闭检查方法如下:
  • 右键单击右边栏中的块。
  • 点击“自定义高亮级别”。
  • 将滑块拖至“无”。

我尝试了这个方法,发现它关闭了所有的错误和警告,这绝对不是预期的结果!你可以通过右键单击右边缘顶部的小“关闭”图标来重新打开它。 - DanyalBurke

1
在我的情况下,我本来只想配置Spring,但却意外地“配置了OSGi”。我处理这个问题的方法是右键单击受影响行之一的右边缘,然后单击“自定义高亮级别”-->“配置检查”。我认为hippoLogic的解决方案不仅可以消除所有语法级别的错误高亮,还可以消除有用的检查级别高亮。这样,您就可以简单地调整后者以排除OSGi。
最好的方法是取消配置OSGi(我没有进行研究),但以下是一个快速/脏的解决方法,可以减少高亮噪音。

如果OSGi方面被“意外”配置,只需删除该方面。模块设置->方面。 - makasprzak

0

要解决此问题,请检查pom文件中是否存在相应的依赖项,以您的情况来看,我认为它可能已经存在,因为您刚刚从Eclipse导入它们,那里没有出现任何错误。还要检查所引用的settings.xml是否正确,并且位于正确的位置,并且从Intellij引用了正确的设置。您的settings.xml存在于maven home中,或者可能被引用为maven home中的符号链接。希望这可以帮助。


0

只需在Maven构建插件中导出相关的包,就像@Brenn的答案一样,具体细节如下:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>${maven.bundle.version}</version>
    <extensions>true</extensions>
    <configuration>
      <instructions>
        <Bundle-DocURL>${project.url}</Bundle-DocURL>
        <Bundle-Activator>
          org.apache.tika.parser.internal.Activator
        </Bundle-Activator>
        <Import-Package>
          org.w3c.dom,
          org.apache.tika.*,
          *;resolution:=optional
        </Import-Package>
        <Export-Package>
          your package here
        </Export-Package>
      </instructions>
    </configuration>
  </plugin>

-1
我在一个从Github克隆的项目上工作,它与OSGI无关,所以我认为这是IDEA的一个bug或者我不小心打开了某个选项。然后我假设IDEA中的“OSGI”功能依赖于插件,因此我禁用了这个插件,错误消息就消失了。
在Mac OS中:
按下command + shift + a,输入plugin
搜索“OSGI”,然后禁用这个插件。

1
你想解释一下这个解决方案以提高获得赞同的机会吗? - Yunnosch
@Yunnosch 我正在从Github上克隆一个项目,与OSGI无关,所以我认为这是IDEA的一个bug或者我不小心打开了某个选项。然后我假设IDEA中的“OSGI”功能依赖于插件,因此我禁用了这个插件。 - inkinworld
请修改您的问题,添加一个解释,而不是将其隐藏在评论中。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接