2

我正在尝试使用Batik-library制作一个显示 SVG 图像的 Java FX 应用程序,但是在正确导入所有组件时遇到问题。

经过大约 5 个小时的搜索和测试,我终于更改了其中一个依赖项的 jar,以删除早于当前模块系统的旧 Java 服务(或任何你称之为的)。所以目前的解决方法是手动删除“ batik-script-1.13.jar ”中的“ META-INF/services/org.apache.batik.script.InterpreterFactory ”-file 。

有没有合适的方法来做到这一点?在我的项目模块信息中,还是通过 Maven?无需手动更改 jar?

提前致谢!:)

如果相关:Mac OS、Java openjdk-14.0.2、Maven 3.6.3、VSCode 1.49.0

4

2 回答 2

1

TL;DRjava.lang.module.InvalidModuleDescriptorException — 无法使用 JPMS 系统规避蜡染库的


长篇大论的版本

几个月前,我自己也遇到了同样的问题。我发现,和你一样,很可能也发现了这个旧的 Jigsaw Dev 邮件列表帖子……</p>

…</p>

> 2) 启动层初始化时出错

> java.lang.module.FindException:无法为

> .m2\repository\org\apache\xmlgraphics\batik-script\1.8\batik-script-1.8.jar

>引起:java.lang.module.InvalidModuleDescriptorException: Provider

>类 org.apache.batik.bridge.RhinoInterpreterFactory 不在模块中

存在 META-INF/services/org.apache.batik.script.InterpreterFactory 配置文件,其中提供者类不在此模块中。

…</p>

回复 OP 的人是拥有数十年经验的 Java 平台开发团队的成员

我解释了他们的“<em>我建议你联系这个库的维护者,向邮件列表 OP 发布一个可以作为模块运行的版本”建议,作为尝试将 batik 库与 JPMS 一起使用的线索是没有希望的。

于 2020-10-04T01:42:29.443 回答
1

在最终放弃 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>
于 2020-10-05T11:30:19.157 回答