将Jar转为OSGI Bundle时Export-Package配置异常问题求助
解决OSGI Bundle打包时Export-Package字段报错及不识别问题
你遇到的问题核心是Manifest文件格式不符合Java解析规范,我们一步步拆解解决:
1. 定位错误根源
你提供的Manifest里多个属性挤在了同一行,比如:
Bnd-LastModified: 1527751846288 Build-Jdk: 1.8.0_161 Built-By: 312847
Java的Manifest解析器要求每个Key: Value必须单独占一行,这种多属性混排的写法会被判定为无效头字段,直接触发invalid header field报错。而当你把Export-Package移到末尾时,虽然能勉强打包,但前面的格式错误已经破坏了整个Manifest的结构,导致AEM无法正确识别OSGI配置。
2. 修复Manifest格式
把所有属性拆分成独立行,确保每个Key: Value单独占据一行,正确的Manifest内容应该是这样的:
Manifest-Version: 1.0 Bnd-LastModified: 1527751846288 Build-Jdk: 1.8.0_161 Built-By: 312847 Bundle-Description: Test Bundle-ManifestVersion: 2 Bundle-Name: Test Bundle Bundle-SymbolicName: test Bundle-Version: 1.1.1.4 Export-Package: com.ingrian.security.nae Created-By: Apache Maven Bundle Plugin
注意:
- 每个属性单独成行,不要有任何属性混排
- 行尾不要留多余空格或特殊字符
Export-Package可以放在任意位置,只要格式正确就不会报错
3. 重新打包验证
用你原来的命令重新执行打包:
jar cvfm test5.jar manifest.txt IngrianNAE-8.4.2.000.p02.jar
这次不会再出现格式错误,打包成功后部署到AEM,Export-Package配置就能被正确识别了。
4. 更省心的打包方式(推荐)
手动维护Manifest很容易踩格式坑,建议用专门的OSGI打包工具:
- 如果用Maven,直接使用
maven-bundle-plugin,它会自动生成符合规范的Manifest,你只需要在pom.xml里配置Export-Package等属性即可 - 或者使用bnd工具,它是OSGI打包的标准工具,能自动处理Manifest格式、依赖导入导出等问题
内容的提问来源于stack exchange,提问作者Johna
相关产品推荐
相关产品推荐

