添加JPMS模块依赖后maven-bundle-plugin 3.3.0报错Invalid class file module-info.class
解决maven-bundle-plugin 3.3.0处理JPMS依赖时的ArrayIndexOutOfBoundsException问题
这个问题的核心原因是maven-bundle-plugin 3.3.0版本对JPMS的module-info.class文件解析支持不完善——插件会默认分析项目中的所有类文件,包括OSGi环境中本不需要的module-info.class,但解析该文件时因逻辑缺陷抛出了数组越界异常。
你可以通过以下两种方式解决:
方案1:升级maven-bundle-plugin到更高版本
3.3.0是比较老旧的版本,后续发布的3.5.0及以上版本已经修复了JPMS相关的解析bug。直接在你的pom.xml中更新插件版本即可:
<build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>3.5.0</version> <!-- 或更高稳定版本,比如4.2.1 --> <extensions>true</extensions> <configuration> <!-- 保留你的原有插件配置 --> </configuration> </plugin> </plugins> </build>
升级后插件就能正确识别并处理module-info.class文件,不会再触发数组越界错误。
方案2:配置插件忽略module-info.class文件
如果暂时无法升级插件,可以直接让插件跳过对module-info.class的解析。在插件的configuration中添加排除规则:
<build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <version>3.3.0</version> <extensions>true</extensions> <configuration> <instructions> <!-- 排除module-info.class,避免插件解析它 --> <Exclude>module-info.class</Exclude> <!-- 保留你的原有instructions配置 --> </instructions> </configuration> </plugin> </plugins> </build>
这样插件就不会尝试解析该文件,自然也就不会触发数组越界的异常。
注意:如果你的项目是OSGi与JPMS混合开发模式,可能需要保留module-info.class并使用支持JPMS的插件版本;但在普通OSGi场景下,module-info.class对bundle运行没有影响,排除它完全可行。
内容的提问来源于stack exchange,提问作者gjoranv
相关产品推荐
相关产品推荐

