Фон: В моем проекте я должен получать изображения из Интернета и изменять их размер перед хранением. Для этого я использую imgscalr для изменения размеров изображений, в которых используется API-интерфейс ImageIO Java.My Java SPI extension не загружен
Дело в том, что API ImageIO, похоже, не поддерживает цветовое пространство CMYK для JPEG, поэтому ему не удается прочитать некоторые снимки, полученные от нашего поставщика данных (я не могу изменить формат изображения).
Чтобы добавить поддержку CMYK, я нашел хорошую lib (которую я пытаюсь упаковать как артефакт maven и немного увеличиваю), который является расширением ImageReaderSpi.
До сих пор так хорошо. Проблема, с которой я сталкиваюсь, заключается в том, что расширение, похоже, не загружается API ImageIO, оно действует так, как будто его нет.
Я создал артефакт maven, который представляет собой простой кувшин, содержащий реализацию расширения, и файл META-INF/services/javax.imageio.spi.ImageReaderSpi
, содержащий имя класса, реализующего Spi.
Я уверен, что банка находится в пути к классам, потому что я использую в нем помощника, и он найден.
Для записи, я развертываю проект (WAR) в Tomcat, а расширительная банка находится в папке WEB-INF/lib
.
Исходный код jar: available here Файл META-INF включен во время сборки maven (это делает аннотация @MetaInfServices).
Я застрял здесь, я думаю, что я делаю все правильно, вот почему я ищу вашу помощь!
Это может быть проблема загрузчика классов. Ваш SPI может загружаться в загрузчик классов, который существует выше загрузчика системного класса и, следовательно, недоступен для него (вы можете смотреть только вниз по иерархии, а не вверх). Вы пытались добавить Jar, содержащий ваш SPI, в папку 'ext' JRE, которую использует Tomcat? – MadProgrammer
И файл службы на самом деле там, когда вы развертываете с хорошими записями и т. Д.? Вы уверены, что, например, он не перезаписывается другим шагом процесса сборки где-то? – fge
MadProgrammer: Я пробовал, но, возможно, я не пытался в правой JVM, повторю попытку. –