maven-bundle-plugin 因“无效的类文件 module-info.class”而失败

Posted

技术标签:

【中文标题】maven-bundle-plugin 因“无效的类文件 module-info.class”而失败【英文标题】:maven-bundle-plugin fails with "Invalid class file module-info.class" 【发布时间】:2018-11-04 22:55:36 【问题描述】:

添加包含 JPMS 模块的依赖项后,maven-bundle-plugin(版本 3.3.0)失败并显示:

[INFO] --- maven-bundle-plugin:3.3.0:bundle (default-bundle) @ my-bundle ---
[ERROR] Bundle myGroup:my-bundle:bundle:1.0 : 
        Exception: java.lang.ArrayIndexOutOfBoundsException: 19
[ERROR] Bundle myGroup:my-bundle:bundle:1.0 : 
        Invalid class file module-info.class (java.lang.ArrayIndexOutOfBoundsException: 19)

该插件似乎尝试(但失败)分析了 module-info.class,这在 OSGi 上下文中应该是不相关的。

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题。玩了很多之后,我发现根本原因是uber-jar。 YMMV。

【讨论】:

【参考方案2】:

将捆绑插件升级到版本 3.5.0 解决了这个问题:

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <version>3.5.0</version>
</plugin>

我还必须将 maven 升级到 3.5,因为最新版本的插件在 maven 3.3 上抛出了 NPE:

Failed to execute goal org.apache.felix:maven-bundle-plugin:3.5.0:bundle (default-bundle) on project my-bundle: Execution default-bundle of goal org.apache.felix:maven-bundle-plugin:3.5.0:bundle failed. NullPointerException

另见FELIX-5698

更新:请在maven central 查找最新版本的捆绑插件。最新版本的 maven 可以在他们的download page找到。

【讨论】:

谢谢。太好了。当我遇到类似问题时,我仍在使用 Maven 3.3.9,并且 maven bundle 插件版本 3.5.0 在 Java 1.8.0_131 上运行【参考方案3】:

如果您使用的是 IntelliJ,尽管您的 maven 配置是最新的,但由于此问题,可能会出现此问题: https://youtrack.jetbrains.com/issue/IDEA-194358

解决方法是关闭 Osmorc 插件

【讨论】:

以上是关于maven-bundle-plugin 因“无效的类文件 module-info.class”而失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 maven-bundle-plugin 安装 OSGi 依赖项

如何使用 bnd/maven-bundle-plugin 从 jar 依赖项将资源文件包含到 osgi 包中?

为啥(以及赞成啥)maven-bundle-plugin 的 wrap/bundleall 目标被弃用?

将 maven-bundle-plugin 与 maven-shade-plugin 一起使用

带有 maven-bundle-plugin 的 OSGI JAR 包

<Export-Package> 用于使用 maven-bundle-plugin 的所有资源