当我尝试编译新的模块化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
关于如何解决或解决此问题的任何建议?我发现关于此问题的文档很少。
只是为了解释导致代码问题的原因,我将分享一个屏幕截图,然后尝试在其周围添加详细信息。
因此,在JAR中,对于版本2.7.2,存在服务声明(META-INF/services
),其中包括org.apache.xalan.extensions.bsf.BSFManager
作为其中之一。这里的服务文件必须为此本身指示提供者,并且应该存在要解析的类(模块路径或未命名模块),以便可靠地配置模块。
在这种情况下,对于模块xalan
(自动模块),列出的服务在依赖关系自身中未打包提供程序类。 (请参见软件包org.apache
,因此它不再具有软件包bsf
和类BSFManager
。因此,您将获得例外。
解决该问题的一项调整是更新库jar(对其进行修补),如果不使用它,则删除服务文件。
一种理想的方式是将其报告给维护人员,如果他们正在积极地维护它(最新版本是将近5年,可能只想寻找更好的替代恕我直言)。
它为我解决了这个问题。