0

我目前正在使用这个库为我的程序添加额外的功能: https: //haraldk.github.io/TwelveMonkeys/TwelveMonkeys ImageIO。

它在 Editor - Intellij IDEA 2020.1.1 中运行良好,但是当我将项目构建到 jar 中时,它不起作用。

错误:

Exception in thread "main" javax.imageio.IIOException: Unsupported Image Type
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1036)
        at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1007)
        at javax.imageio.ImageIO.read(ImageIO.java:1462)
        at javax.imageio.ImageIO.read(ImageIO.java:1309)

此错误表明使用了内部 java imageio,而不是来自 TwelveMonkeys。我试图在模块中设置优先级,但这也没有帮助:

模块 工件

爪哇版:

java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (Zulu 8.46.0.19-CA-win64) (build 1.8.0_252-b14)
4

2 回答 2

1

@haraldK 感谢您的回答。我花了几天时间才真正弄清楚,但现在它正在工作。对我所做的事情的一点解释:

  1. 转移到 Maven 项目
  2. 添加到pom.xml所有依赖项
  3. 添加maven-shade-plugin
  4. 使用了两个变压器:ServicesResourceTransformerManifestResourceTransformer
于 2020-09-24T05:02:11.287 回答
0

我也为此苦苦挣扎了一段时间,在应用了 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)。

于 2022-01-18T14:36:30.260 回答