Java 无法派生模块描述符:提供程序{class X}不在模块中

Java 无法派生模块描述符:提供程序{class X}不在模块中,java,java-11,java-module,java-platform-module-system,serviceloader,Java,Java 11,Java Module,Java Platform Module System,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.In

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

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

Xalan 我查看了他们的bug跟踪器,没有找到报告,也不确定库的维护有多积极


一般说明 为了解释代码中出现问题的原因,我将分享一个屏幕截图,然后尝试添加相关细节

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

在本例中,对于模块
xalan
(自动模块),列出的服务没有在依赖项本身中打包提供程序类。(参见包
org.apache
,它没有包
bsf
和类
BSFManager
。因此会出现异常

短期黑客 解决这个问题的一个方法是更新库jar(修补它),如果不使用服务文件,则删除它,或者添加从相应工件复制的提供者

如果您不直接依赖于这个工件或它的父依赖项,那么您可以让它们保留在
--classpath
上,并作为应用程序的解决方案得到解决

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

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


它为我解决了这个问题。

我建议进一步阅读,以了解它的解决方法。我也有同样的问题,我将其降级到1.8