首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清单文件是如何在我的AEM osgi包中生成的?

清单文件是如何在我的AEM osgi包中生成的?
EN

Stack Overflow用户
提问于 2018-06-28 11:47:20
回答 2查看 2.2K关注 0票数 2

我用aem-project-archetype版本13创建了一个maven项目,在将包安装到felix之后,我在felix控制台中发现了3个导入的could not be resolved包的错误。我正在试图找出这些内容包含在我的清单文件中的位置,该文件位于目标/清单文件夹中。这样我就可以修改各个包的版本。

我在felix控制台中遇到的错误,我的包处于安装状态,而不是活动状态。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-28 14:26:21

在开发AEM应用程序时,OSGI (和Manifest)通常是通过Felix maven-bundle插件生成的。

该插件基于您在所有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依赖树列出所有依赖项及其版本。
  3. 这是特定于AEM的,如果您使用的是uber-jar,请确保您对正在运行的正确的AEM实例使用了正确的版本。

注意,在清单导入中,范围[2.10,3)意味着它接受2.10.0到3.0.0之间的所有版本,但不包括3.0.0。根据我的经验,Maven包插件总是会编写范围,其中min是您的maven依赖程序包版本,max是下一个major版本。

手动更改导入:

这是不推荐的,并且有非常具体的用例,但是您可以手动告诉包插件要添加到导入的哪个版本。参见包插件文档中的导入包指令

票数 1
EN

Stack Overflow用户

发布于 2018-06-28 12:36:27

这些导入基于您编译的代码。没有什么讨厌的小道消息会缠着你。它们的目的是验证所运行的内容与编译所针对的内容是否兼容。我假设运行时的版本比您需要的要低。这意味着在Maven中作为安装程序的编译路径比运行时具有更晚的版本。如果可以运行代码,则可能会遇到类、未找到异常或没有此类方法错误。

也许不会。但是,您可能会遇到更糟的情况,即事情不正确(编译期间所做的承诺可能无法实现),问题可能会在损害发生后很久才会发生。

这些东西的存在有一个很好的理由。它们就像插在插头上的土钉,保护着你。

怎么解决这个问题?看看您的依赖关系。您必须确保针对低于或等于运行时中存在的版本进行编译。您可以首先查看POM中的版本。如果没有这些版本,那么查看Maven使用的编译路径。

更换舱单上的数字就像锯掉插头上的土钉,否则它就不适合在墙上……馊主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51082156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档