Зависимость извлекает транзитивную библиотеку, которая ломает ImageIO.read с использованием файлов TIFF.

В настоящее время я пытаюсь объединить отдельный проект с нашим, который использует deeplearning4j-core в качестве зависимости. deeplearning4j-core использует com.twelvemonkeys.imageio для внутреннего использования, что позволяет регистрировать плагины в ImageIO.read(). Однако это, похоже, прерывает все вызовы ImageIO.read, которые у нас есть в настоящее время в производстве, со следующим сообщением об ошибке:

javax.imageio.IIOException: No SOF segment in stream
    at com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader.getSOF(Unknown Source) ~[imageio-jpeg-3.1.1.jar:3.1.1]
    at com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source) ~[imageio-jpeg-3.1.1.jar:3.1.1]
    at com.github.jaiimageio.impl.plugins.tiff.TIFFJPEGDecompressor.decodeRaw(TIFFJPEGDecompressor.java:226) ~[jai-imageio-core-1.4.0.jar:1.4.0]
    at com.github.jaiimageio.plugins.tiff.TIFFDecompressor.decode(TIFFDecompressor.java:2583) ~[jai-imageio-core-1.4.0.jar:1.4.0]
    at com.github.jaiimageio.impl.plugins.tiff.TIFFImageReader.decodeTile(TIFFImageReader.java:1144) ~[jai-imageio-core-1.4.0.jar:1.4.0]
    at com.github.jaiimageio.impl.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1414) ~[jai-imageio-core-1.4.0.jar:1.4.0]
    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1468) ~[na:na]
    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1315) ~[na:na]
  [production code]

Мы читаем файлы TIFF, которые раньше не распознавались. Теперь они вообще не могут быть прочитаны и выдают исключение, указанное выше, в 90% случаев запуска программного обеспечения. В 10% случаев он работает без сбоев, пока JVM не приостанавливается. Это заставляет меня думать, что это проблема порядка загрузки, но я слишком неопытен, чтобы решить эту проблему.

Я знаю, что основная проблема, вероятно, более серьезная, но ее запуск и запуск прямо сейчас имеет первостепенное значение.

Мы используем град.


person Joe    schedule 05.03.2020    source источник
comment
Похоже, это проблема с целевой библиотекой, поскольку отсутствие зависимостей приводит к ошибкам Class Not Found Exception. Также я обнаружил, что это может означать, что был предоставлен неправильный файл: github.com/haraldk/TwelveMonkeys/ вопросы/278   -  person Manushin Igor    schedule 05.03.2020
comment
Да, я нашел то же самое. Я хочу сказать, что наши вызовы ImageIO.read работали достаточно хорошо до того, как мы добавили зависимость к глубокому обучению, но после добавления этой зависимости все наши вызовы ImageIO.read сломались, потому что вызовы чтения теперь делегируются TwelveMonkeys внутри ImageIO, что вызывает исключение   -  person Joe    schedule 05.03.2020
comment
Можете ли вы исключить зависимость от двенадцати обезьян, не нарушая ничего другого? Если у вас уже есть что-то зарегистрированное для чтения TIFF, это может не быть проблемой.   -  person heisbrandon    schedule 09.03.2020
comment
@Joe: Автор библиотеки TwelveMonkeys здесь. Я вижу, что вы используете комбинацию (разветвленного) плагина для чтения JAI TIFF и нашего плагина JPEG как и в упомянутой выше проблеме, это не работает. Вероятно, будет лучше, если вы также выберете наш подключаемый модуль TIFF (либо удалив/исключив зависимость, либо указав порядок, чтобы наш подключаемый модуль выбирался перед версией JAI), или, как вы предлагаете, удалите/исключите зависимости от TwelveMonkeys.   -  person Harald K    schedule 10.03.2020
comment
Ваш комментарий определенно помог, так как указал мне правильное направление. Благодаря этому вопросу я понял, что могу изменить порядок / удалить зависимости плагинов после загрузки JVM. В итоге я написал класс конфигурации, который просто удаляет плагин TIFF из JAI и sun, и теперь файлы TIFF снова работают безупречно. Конечно, это очень хрупкое решение, но оно помогло снова запустить все. Сохранение этого вопроса для других подходов к решению.   -  person Joe    schedule 11.03.2020