问题描述
我正在尝试使用Batik-library创建一个显示SVG图像的Java FX应用程序,但是在正确导入所有组件方面遇到了问题。
经过大约5个小时的搜索和测试,我终于更改了依赖项的jar之一,以删除早于当前模块系统的旧Java服务(或您所说的任何服务)。因此,当前的解决方法是手动删除“ batik-script-1.13.jar”中的“ meta-inf / services / org.apache.batik.script.InterpreterFactory ”文件。
有没有正确的方法?在我的项目module-info中,还是通过maven?无需手动更改罐子?
提前谢谢! :)
如果相关: Mac OS,Java openjdk-14.0.2,Maven 3.6.3,VSCode 1.49.0
解决方法
TL; DR -使用JPMS系统无法解决蜡染库的 java.lang.module.InvalidModuleDescriptorException
问题。>
冗长的版本
几个月前,我自己遇到了同一问题。我发现this old Jigsaw Dev mailing list post和您一样,也像您一样……
...
> 2)引导层初始化期间发生错误
> java.lang.module.FindException:无法导出
的模块描述符> .m2 \ repository \ org \ apache \ xmlgraphics \ batik-script \ 1.8 \ batik-script-1.8.jar
> 原因:java.lang.module.InvalidModuleDescriptorException:提供程序
org.apache.batik.bridge.RhinoInterpreterFactory类不在模块中
存在一个META-INF / services / org.apache.batik.script.InterpreterFactory配置文件,其配置文件不在此模块中。
...
在OP中回复的人有a member of the Java Platform Development Team,其中有decades of experience。
我解释了他们的“ 我建议您联系该库的维护者以发布可以作为模块运行的版本”建议,以作为邮件列表OP的提示,带有JPMS的蜡染库是没有希望的。
,我花了很长时间才与之抗争,直到最终放弃JPMS并试图通过使我已经开始工作的JAR变更自动化来规避系统。
通过使用一个称为Truezip的Maven插件,我将Maven设置为自动解压缩,更改然后重新压缩依赖项。即使它不是最优雅的解决方案,它也可以工作,而且我还在另一个具有类似问题的依赖项上使用它。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>truezip-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>fix-batik-script</id>
<goals>
<goal>remove</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<fileset>
<directory>${settings.localRepository}/org/apache/xmlgraphics/batik-script/1.13/batik-script-1.13.jar/META-INF/services</directory>
<includes>
<include>org.apache.batik.script.InterpreterFactory</include>
</includes>
</fileset>
</configuration>
</execution>
</executions>
</plugin>