我用aem-project-archetype版本13创建了一个maven项目,在将包安装到felix之后,我在felix控制台中发现了3个导入的could not be resolved包的错误。我正在试图找出这些内容包含在我的清单文件中的位置,该文件位于目标/清单文件夹中。这样我就可以修改各个包的版本。
我在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发布于 2018-06-28 14:26:21
在开发AEM应用程序时,OSGI (和Manifest)通常是通过Felix maven-bundle插件生成的。
该插件基于您在所有java代码中导入的Java包编写包imports。如果您是从maven依赖项导入的,那么假设Sling,该导入的版本将是来自Sling的包版本。
你在这里遇到的问题可能是两个中的一个
2.很可能是这样的,因为吊索总是和AEM捆绑在一起。
你能做些什么来调试/修复?
pom.xml中的依赖项版本,并确保OSGI版本在清单导入指定的范围内。您可以使用maven依赖树列出所有依赖项及其版本。uber-jar,请确保您对正在运行的正确的AEM实例使用了正确的版本。注意,在清单导入中,范围
[2.10,3)意味着它接受2.10.0到3.0.0之间的所有版本,但不包括3.0.0。根据我的经验,Maven包插件总是会编写范围,其中min是您的maven依赖程序包版本,max是下一个major版本。
手动更改导入:
这是不推荐的,并且有非常具体的用例,但是您可以手动告诉包插件要添加到导入的哪个版本。参见包插件文档中的导入包指令
发布于 2018-06-28 12:36:27
这些导入基于您编译的代码。没有什么讨厌的小道消息会缠着你。它们的目的是验证所运行的内容与编译所针对的内容是否兼容。我假设运行时的版本比您需要的要低。这意味着在Maven中作为安装程序的编译路径比运行时具有更晚的版本。如果可以运行代码,则可能会遇到类、未找到异常或没有此类方法错误。
也许不会。但是,您可能会遇到更糟的情况,即事情不正确(编译期间所做的承诺可能无法实现),问题可能会在损害发生后很久才会发生。
这些东西的存在有一个很好的理由。它们就像插在插头上的土钉,保护着你。
怎么解决这个问题?看看您的依赖关系。您必须确保针对低于或等于运行时中存在的版本进行编译。您可以首先查看POM中的版本。如果没有这些版本,那么查看Maven使用的编译路径。
更换舱单上的数字就像锯掉插头上的土钉,否则它就不适合在墙上……馊主意。
https://stackoverflow.com/questions/51082156
复制相似问题