由于AEM as a Cloud Service中的PDFBox库,管道编译失败
当PDFBox库未正确嵌入为符合OSGi的捆绑包时,Adobe Experience Manager (AEM) as a Cloud Service中的管道编译失败。 这会导致在构建过程中出现未解决的依赖关系和Analyzer错误。 要解决此问题,您需要将PDFBox及其依赖项包装在专用的OSGi捆绑包中,更新项目的POM文件,并确保正确的构建顺序和插件版本。
描述 description
环境
Adobe Experience Manager (AEM) as a Cloud Service - Sites(开发环境)
问题/症状
- 警告,指示诸如
pdfbox-io:3.0.1和pdfbox:3.0.1之类的捆绑包在不指定版本范围的情况下导入包。 - 错误,说明未以所需的OSGi启动级别导出PDFBox中的所需包,导致运行时依赖关系无法解析:
2025-05-28 11:31:04.782 The analyser found the following errors for author and publish : 2025-05-28 11:31:04.783 [ api-regions-exportsimports] <custom>-<bundle>-project.core:0.0.1-SNAPSHOT: Bundle <custom>-<bundle>-project.core:0.0.1-SNAPSHOT is importing package(s) [ org.apache.pdfbox.pdmodel.common.filespecification, org.apache.pdfbox.multipdf, org.apache.pdfbox.pdmodel] in start level 20 but no bundle is exporting these for that start level. (com.<custom>.<code>:<custom>-<bundle>-project.all:0.0.1-SNAPSHOT)
- 该问题仅在云环境中发生;本地生成编译成功。
- 尝试使用
filter.xml嵌入PDFBox或修改POM文件失败。
解决方法 resolution
要解决此问题,请确保为AEM的OSGi运行时环境正确嵌入和配置所有依赖项:
-
创建单独的模块以将PDFBox包装为OSGi捆绑包。
- 包括所有必需的依赖项,如FontBox。
- 使用Apache Felix Maven捆绑包插件显式导出包。
-
更新
all/pom.xml文件。-
为PDFBox包装器模块添加嵌入条目:
code language-none <embedded> <groupId>com.<custom>.<code></groupId> <artifactId><custom>-<bundle>-project.pdfbox-wrapper</artifactId> <type>jar</type> <target>/apps/custom-packages/application/install</target> </embedded> -
声明包装模块的依赖关系:
code language-none <dependency> <groupId>com.<custom>.<code></groupId> <artifactId><custom>-<bundle>-project.pdfbox-wrapper</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency>
-
-
通过在聚合器POM文件中对模块正确排序,确保包装模块先于依赖包装模块的其他模块生成。
-
如果您的当前版本不支持
filevault-package-maven-plugin中的<version>等标记,请将<embedded>升级到版本1.1.5或更高版本。 -
在本地运行
mvn clean install以验证:- 使用正确的清单条目创建包装器JAR。
- 工件出现在
/apps/custom-packages/application/install下。
-
通过Cloud Manager管道部署更新的包,并确认Analyzer不再发生错误。
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f