问题描述
当我尝试编译新的模块化 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
有什么建议可以解决或解决这个问题吗? 我发现关于这个问题的文档很少。
1楼
夏兰
我在他们之后查看了他们的错误跟踪器,但无法找到此报告,也不确定该库的维护程度如何。
一般说明
只是为了解释是什么导致了您的代码中的问题,我将分享一个屏幕截图,然后尝试添加有关它的详细信息。
因此,在版本 2.7.2 的 JAR 中,有服务声明 ( META-INF/services
),其中包括org.apache.xalan.extensions.bsf.BSFManager
作为其中之一。
此处的服务文件必须为其自身指明提供者,并且该类应该存在于要解析的模块路径上,以实现模块的可靠配置。
在这种情况下,对于模块xalan
(自动模块),列出的服务没有将提供程序类打包在依赖项本身中。
(参见包org.apache
,它没有进一步的包bsf
和BSFManager
类。因此,你得到的例外。
短期黑客
解决这个问题的调整之一是更新库 jar(修补它)并在您不使用服务文件时删除它。 或者添加从相应工件复制的提供者。
如果您不直接依赖此工件或其父依赖项,则可以让它们保留在--classpath
上,并作为应用程序的解析。
长期解决
一个理想的方法是向维护者报告并解决它。
这取决于他们维护它的积极程度,例如xalan
的最后一个版本是将近 5 年前,在我看来,可能只是想寻找一个积极参与的替代方案。
2楼
我尝试在 Eclipse 中为 TestNG 安装更新:“帮助 -> 检查更新 -> 取消全选并选择 TestNG 复选框。然后
安装最新版本我安装了以 7.2.0 开头的版本。
它为我解决了这个问题。