我也为此苦苦挣扎了一段时间,在应用了 AstroCool 建议的解决方案后,尽管 POM 文件中有 batik-transcoder 和 imageio-batik 依赖项,但我的 JAR 文件仍然无法读取 SVG 文件。
因此,对于其他为此苦苦挣扎的人,这里有一些关于如何应用 maven-shade-plugin 及其转换器以及需要哪些依赖项才能使其工作的解释。
首先,我使用过时的依赖项,因为我使用的是 IntelliJ 的搜索功能,并且由于某种原因,它只找到了 TwelveMonkeys 的旧版本的 batik-transcoder 和 imageio-batik。
所以这是我目前在项目的 POM 文件中使用的依赖项:
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-transcoder</artifactId>
<version>1.14</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-batik</artifactId> <!-- svg -->
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-tga</artifactId>
<version>3.8.1</version>
</dependency>
请注意,您始终可以使用搜索功能在此处找到这些最新版本:https ://mvnrepository.com/
要使用 maven-shade-plugin,请将这些应用到 POM 文件的“插件”部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"/>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
最后,如果您进行了许多更改和添加,最好清理您的项目,在 IntelliJ 中,您可以通过单击 File -> Invalidate Chaches 来执行此操作
之后点击 Build -> Rebuild project 然后构建你的新 JAR 文件。如果您仍然遇到问题,可能值得在重建项目后创建一个新的 Artifact(如果使用 intelliJ)。