Java 11无法派生模块描述符

时间:2019-02-14 02:36:38

标签: java maven java-11 java-module serviceloader

当我尝试编译新的模块化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

任何建议如何解决或解决此问题?我发现有关此问题的文档很少。

2 个答案:

答案 0 :(得分:1)

我在their index page之后查看了他们的错误跟踪器,但找不到报告的报告,也不确定该库的维护程度如何。

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

Screenshot

因此,在2.7.2版的JAR中,有服务声明(META-INF/services),其中包括org.apache.xalan.extensions.bsf.BSFManager作为其中之一。服务文件必须在此处指示自身的提供者,并且应该解析该类(模块路径或未命名模块)以进行可靠的模块配置。

在这种情况下,对于模块xalan(自动模块),列出的服务在依赖项本身中未打包提供程序类。 (请参见软件包org.apache,因此它不再具有软件包bsf和类BSFManager。因此,您会遇到异常。

要解决的一项调整措施就是更新库jar(对其进行修补)并在不使用服务文件的情况下摆脱它。

一种理想的方法是将其报告给维护人员,如果他们正在积极维护它(最新版本已经将近5年了,可能只想寻找更好的替代恕我直言)。

答案 1 :(得分:0)

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

它为我解决了这个问题。