TwelveMonkeys ImageIO 在使用 OpenJDK8 构建到 jar 后无法正常工作
TwelveMonkeys ImageIO is not working after build in to jar with OpenJDK8
我目前正在使用这个库向我的程序添加额外的功能:
https://haraldk.github.io/TwelveMonkeys/ TwelveMonkeys ImageIO.
它在编辑器 - 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。我曾尝试在模块中设置优先级,但这也没有帮助:
Modules
Artifacts
Java版本:
java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (Zulu 8.46.0.19-CA-win64) (build 1.8.0_252-b14)
@haraldK 感谢您的回答。我花了几天时间才真正弄清楚,但现在它正在工作。对我所做的一些解释:
- 转移到Maven项目
- 添加到
pom.xml
所有依赖项
- 添加
maven-shade-plugin
- 使用了两个变压器:
ServicesResourceTransformer
和 ManifestResourceTransformer
我也为此苦苦挣扎了一段时间,在应用 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 文件的 'plugins' 部分:
<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 中,您可以通过单击文件 -> 使 Chaches 无效来完成此操作
之后单击构建 -> 重建项目,然后构建新的 JAR 文件。如果您仍然遇到问题,可能值得在重建项目后创建一个新的工件(如果使用 intelliJ)。
我目前正在使用这个库向我的程序添加额外的功能: https://haraldk.github.io/TwelveMonkeys/ TwelveMonkeys ImageIO.
它在编辑器 - 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。我曾尝试在模块中设置优先级,但这也没有帮助:
Modules Artifacts
Java版本:
java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (Zulu 8.46.0.19-CA-win64) (build 1.8.0_252-b14)
@haraldK 感谢您的回答。我花了几天时间才真正弄清楚,但现在它正在工作。对我所做的一些解释:
- 转移到Maven项目
- 添加到
pom.xml
所有依赖项 - 添加
maven-shade-plugin
- 使用了两个变压器:
ServicesResourceTransformer
和ManifestResourceTransformer
我也为此苦苦挣扎了一段时间,在应用 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 文件的 'plugins' 部分:
<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 中,您可以通过单击文件 -> 使 Chaches 无效来完成此操作
之后单击构建 -> 重建项目,然后构建新的 JAR 文件。如果您仍然遇到问题,可能值得在重建项目后创建一个新的工件(如果使用 intelliJ)。