我试图使一个JavaFX应用程序显示使用蜡染库的SVG图像,但我有问题得到正确导入所有组件。
经过大约5个小时的搜索和测试,我终于修改了一个依赖项的jar,以删除当前模块系统之前的旧Java服务(或任何你称之为它的东西)。因此,当前的解决方法是手动删除“batik-script-1.13.jar”中的“META-INF/services/org. apache.batik.script.解释器工厂”文件。
有没有合适的方法来做到这一点?在我的项目模块信息中,还是通过maven?无需手动更改jar?
提前感谢!:)
如果相关:MacOS,Javaopenjdk-14.0.2,Maven 3.6.3,VSCode 1.49.0
太长别读-使用JPMS系统无法规避蜡染库的java. lang.module.InvalidModuleSpeptorException问题。
啰嗦的版本
几个月前,我自己也遇到了同样的问题。我发现,像你一样,很可能也发现了,这个古老的拼图开发邮件列表帖子…
…
存在META-INF/services/org. apache.batik.script.解释器工厂配置文件,其中包含不在此模块中的提供程序类。
…
回复OP的人是Java平台开发团队的成员,拥有数十年的经验。
我将他们的“我建议您联系此库的维护者以发布可以作为模块运行的版本”建议解释为邮件列表OP,作为尝试将batik库与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>