从Fat-JAR / Uber-JAR

时间:2020-03-24 13:47:57

标签: java maven imagej uberjar fatjar

在使用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.xmldeploy.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依赖项的一部分(不是我介绍的一个)。

我真的不知道下一步该怎么做,欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

imagej-legacy版本10.37.4应该可以解决此问题,即将通过pom-scijava 29.0.0see here)推出

我测试了pom-scijava 29.0.0-beta-2,并确认它可以解决此问题。