Исключение `java .lang.IllegalStateException: файл zip закрыт`, при запуске кода из Fat-JAR / Uber-JAR - PullRequest
1 голос
/ 24 марта 2020

У меня проблема с моим программным обеспечением, когда я собираю и запускаю его как FatJAR / UberJar, созданный с Maven. В этом случае я получаю эту ошибку:

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 и выполняется затенение.

Я также вошел в JAR с помощью IntelliJ и установил точку останова в зависимости 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 (я не представляю его).

Я не знаю, что делать дальше, и буду рад любым предложениям!

...