Я успешно запускаю приложение C++, которое загружает JVM с файлом JAR в качестве аргумента classpath. Затем приложение успешно использует вызовы JNI для выполнения различных функций, определенных в файлах .class в этом файле JAR.
В структуру каталогов файла .jar включен сторонний набор файлов .class — объединенных из jai_imageio.jar (эти файлы .class с их полной структурой каталогов были объединены в один файл .jar с помощью Intellij IDEA). Также в объединенный файл .jar включены строки из исходного файла jai_imageio.jar manifest.mf
, в частности имплементация-название
и связанные строки. Также присутствует папка meta-inf/services
, также скопированная из jai_imageio.jar. Различные службы, перечисленные в каталоге services
, выглядят правильно.
В частности, javax.imageio.spi.ImageOutputStreamSpi
в папке meta-inf/services
в файле .jar содержит одну строку com.sun.media .imageioimpl.stream.ChannelImageOutputStreamSpi
, и в файле .jar есть класс, соответствующий этому, точно в каталоге, указанном этой строкой: com/sun/media/imageioimpl/stream/ChannelImageOutputStreamSpi.class
.
Однако, когда код Java выполняет следующую строку:
ImageIO.write(image, "tiff", file); // Assume 'image' is a BufferedImage and 'file' is a File
... он выдает исключение:
java.util.ServiceConfigurationError: javax.imageio.spi.ImageOutputStreamSpi:
Provider com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi not found
... даже если этот класс присутствует в том же файле .jar, как указано выше.
Кто-нибудь может объяснить, почему возникает эта ошибка и что мне делать, чтобы ее устранить.