我正在尝试使用 Batik-library 制作一个显示 SVG 图像的 Java FX 应用程序,但我在正确导入所有组件时遇到问题。
经过大约 5 小时的搜索和测试,我终于更改了其中一个依赖项的 jar 以删除早于当前模块系统的旧 Java 服务(或您称之为的任何内容)。因此,当前的解决方法是手动删除“batik-script-1.13.jar”中的“META-INF/services/org.apache.batik.script.InterpreterFactory”文件。
是否有正确的方法来做到这一点?在我的项目模块信息中,还是通过 Maven?无需手动更改 jar?
提前致谢! :)
如果相关: Mac 操作系统,Java openjdk-14.0.2,Maven 3.6.3,VSCode 1.49.0
最佳答案
TL;DR — 无法绕过 batik 库的 java.lang.module.InvalidModuleDescriptorException
使用 JPMS 系统的问题。
冗长的版本
几个月前,我自己也遇到了同样的问题。我发现,很可能也发现了,this old Jigsaw Dev mailing list post ……
…
> 2) Error occurred during initialization of boot layer
> java.lang.module.FindException: Unable to derive module descriptor for
> .m2\repository\org\apache\xmlgraphics\batik-script\1.8\batik-script-1.8.jar
> Caused by: java.lang.module.InvalidModuleDescriptorException: Provider
> class org.apache.batik.bridge.RhinoInterpreterFactory not in module
There exists META-INF/services/org.apache.batik.script.InterpreterFactory config file with a provider class that is not in this module.
…
回复 OP 的人是 a member of the Java Platform Development Team有 decades of experience .
我解释了他们对邮件列表 OP 的“我建议您联系该库的维护者以发布一个可以作为模块运行的版本”的建议,作为尝试使用带有 JPMS 的 batik 库是没有希望的。
关于java - 在使用 Java 模块时规避旧的 java meta-inf/services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63910813/