在使用Maven生成的FatJAR / UberJar进行构建和运行时,我的软件存在问题。在这种情况下,我会收到此错误:
Uncaught error fetching image:
java.lang.IllegalStateException: zip file closed
at java.util.zip.ZipFile.ensureOpen(ZipFile.java:686)
at java.util.zip.ZipFile.getInputStream(ZipFile.java:366)
at java.util.jar.JarFile.getInputStream(JarFile.java:452)
at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:164)
at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:127)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
但是,直接从IntelliJ启动时,该软件可以正常工作。
我创建了一个最小的示例来在此处重现错误:
https://github.com/michaelmell/bugfix_003-ImageJFunctions_show-call-fails-in-UberJar
问题与调用有关(请参阅Git存储库以获取完整代码):
ImageJFunctions.show(input);
我怀疑我需要调整pom.xml
中的阴影,但是我不太熟悉该配置。
请参阅pom.xml
和deploy.sh
,以获取有关如何构建JAR和完成阴影的详细信息。
我还使用IntelliJ进入JAR,并在依赖项URLImageSource::getDecoder
中设置了一个断点,以检查失败的URL。是:
/PATH/TO/THE/GIT/REPOSITORY/target/ImageJFunctions_show__failure_minimal_example-1.0-SNAPSHOT.jar!/icons/imagej-256.png
JAR文件中的文件:icons/imagej-256.png
。请注意,这是一个图标,它是imagej依赖项的一部分(不是我介绍的一个)。
我真的不知道下一步该怎么做,欢迎任何建议!
答案 0 :(得分:0)
imagej-legacy
版本10.37.4
应该可以解决此问题,即将通过pom-scijava 29.0.0
(see here)推出
我测试了pom-scijava 29.0.0-beta-2
,并确认它可以解决此问题。