如何在我的AEM osgi包中生成MANIFEST文件?

问题描述 投票:1回答:2

我用aem-project-archetype版本13创建了一个maven项目。在将软件包安装到AEM之后,我在felix控制台中遇到3个导入的包could not be resolved。我试图找出它们从哪里被包含到我的清单文件中,该文件位于target / MANIFEST文件夹中。这样我就可以修改各个捆绑包的版本。

我在felix控制台中遇到的错误,我的软件包处于已安装状态,未处于活动状态

org.apache.sling.api.resource,version=[2.10,3) -- Cannot be resolved
org.apache.sling.api.servlets,version=[2.2,3) -- Cannot be resolved
org.apache.sling.models.annotations,version=[1.4,2) -- Cannot be resolved
osgi aem cq5 osgi-bundle manifest.mf
2个回答
1
投票

当您开发AEM应用程序时,OSGI包(和Manifest)通常通过Felix maven-bundle-plugin生成。

该插件根据您在所有Java代码中导入的java包编写包imports。如果您从maven依赖项导入,请说Sling该导入的版本将是Sling的软件包版本。

你在这里遇到的问题可能是两个中的一个

  1. 您导入的包在OSGI(AEM实例)中不存在
  2. maven依赖项中的版本与OSGI(AEM实例)中的版本不匹配。因此,OSGI无法解析您导入的版本。

2.可能就是这种情况,因为吊索总是与AEM捆绑在一起。

你可以做些什么来调试/修复?

  1. 您可以访问http://localhost:4502/system/console/depfinder并在那里尝试您的软件包,以查看OSGI中实际导出的版本。
  2. 检查pom.xml中的依赖项版本,并确保OSGI版本在清单导入指定的范围内。您可以使用maven dependency tree列出所有依赖项及其版本。
  3. 这个特定于AEM,如果您使用uber-jar,请确保您使用的正确版本正在运行您正确的AEM实例。

请注意,在清单导入中,范围[2.10,3)表示它接受2.10.0和3.0.0之间的所有版本,但不包括3.0.0。根据我的经验,Maven bundle插件将始终写入min是maven依赖包版本的范围,max是下一个major版本。

手动更改导入:

这不推荐使用,并且具有非常具体的用例,但您可以手动告诉bundle插件要添加到导入的版本。请参阅bundle plugin docs中的import-package instruction


0
投票

这些导入基于您编译的代码。没有一些讨厌的小花絮来纠缠你。它们的目的是验证您运行的内容是否与您编译的内容兼容。我假设运行时的版本低于您的要求。这意味着您在Maven中设置的编译路径具有比运行时更高的版本。如果您可以运行代码,则可能会遇到Class Not Found Exception或No Such Method错误。

也许不是。但是,你可能会遇到更糟糕的情况,即事情不正确(在编译过程中作出的承诺可能无法实现),并且在损坏发生后可能会发生很多问题。

这个东西是有充分理由的。它们就像插头上的接地针,它们可以保护您。

如何解决这个问题?看看你的依赖项。您必须确保编译的版本低于或等于运行时中的版本。您可以先查看POM中的版本。如果这些版本不存在,那么请查看Maven使用的编译路径。

更换清单中的数字就像锯掉插头上的接地引脚一样,否则它将不适合墙壁......糟糕的主意。

© www.soinside.com 2019 - 2024. All rights reserved.