【问题标题】:Unable to derive module descriptor: Provider {class X} not in module无法派生模块描述符:提供程序 {class X} 不在模块中
【发布时间】:2019-07-08 00:12:15
【问题描述】:

我在尝试编译新的模块化 Java 11 应用程序时收到此错误消息:

Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for C:\Users\inter\.m2\repository\xalan\xalan\2.7.2\xalan-2.7.2.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class org.apache.bsf.BSFManager not in module

这似乎是来自依赖项的依赖项的问题。我什至找不到哪个模块将其拉入,因此我可以对其进行更新。

我正在使用 openjdk 11.0.2、IntelliJ 2018.3.4、Maven

有什么建议可以解决或解决这个问题吗?我发现关于这个问题的文档很少。

【问题讨论】:

    标签: java java-11 java-module java-platform-module-system serviceloader


    【解决方案1】:

    夏兰

    我在their index page 之后查看了他们的错误跟踪器,但无法找到此报告,也不确定该库的维护情况。


    一般说明

    为了解释导致代码出现问题的原因,我将分享一个屏幕截图,然后尝试在其周围添加详细信息。

    因此,在 2.7.2 版的 JAR 中,有服务声明 (META-INF/services),其中包括 org.apache.xalan.extensions.bsf.BSFManager。这里的服务文件必须为自己指明提供者,并且该类应该出现在要解析的模块路径上,以便可靠地配置模块。

    在这种情况下,对于模块xalan(自动模块),列出的服务没有将提供程序类打包在依赖项本身中。 (请参阅包org.apache,它没有进一步的包bsfBSFManager 类。因此你得到的例外。

    短期破解

    解决该问题的其中一个调整是更新库 jar(修补它)并在不使用服务文件时删除它。或者添加从相应工件复制的提供程序。

    如果您不直接依赖此工件或其父依赖项,您可以让它们保留在 --classpath 上,并为您的应用程序解析为 unnamed module

    长期解决

    一个理想的方法是向维护人员报告并解决它。这取决于他们维护它的积极程度,例如xalan 的上一个版本大约是 5 年前,在我看来,可能只是想寻找一个积极参与的替代方案。

    【讨论】:

    【解决方案2】:

    我尝试在 Eclipse 中为 TestNG 安装更新: “帮助 -> 检查更新 -> 取消全选并选中 TestNG 复选框。然后
    安装最新版本我安装了以 7.2.0 开头的版本。

    它为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多