Поскольку я потратил значительное количество времени на отладку этой проблемы, я подумал, что поделюсь своим решением здесь, несмотря на возраст вопроса. Вторая ссылка Сриканта была особенно полезна.
Причина ошибки
JAI требуется имя поставщика для некоторых из его внутренних глубин, в частности javax.imageio.spi.IIOServiceProvider, который используется многими (всеми?) Программами чтения изображений для их низкоуровневого ввода-вывода. Строка не очень требовательна, но не может быть нулевой.
Вместо того, чтобы жестко кодировать имя поставщика, класс ImageReaderSpi получает имя поставщика от sun.media.imageioimpl.common.PackageUtil.getVendor (). Это, в свою очередь, читает его из файла MANIFEST.MF банку . Обычно вы ссылаетесь на стандартную упаковку jai-imageio, поэтому информация о продавце Sun читается. Однако, поскольку вы создаете толстый файл jar, вы заменили файл Sun MANIFEST.MF своим собственным, в котором отсутствует необходимая информация.
Решение
Включите следующие строки в файл MANIFEST.MF:
Specification-Title: Java Advanced Imaging Image I/O Tools
Specification-Version: 1.1
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: com.sun.media.imageio
Implementation-Version: 1.1
Implementation-Vendor: Sun Microsystems, Inc.
Значения для каждого свойства могут быть любыми (я использовал мое конкретное приложение / версию / компанию), если все шесть определены.
Maven
Если вы использовали плагин сборки maven для создания своей толстой фляги, maven может автоматически включать правильные номера версий и тому подобное. Обновите ваш pom.xml
следующим разделом <archive>
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<Specification-Vendor>MyCompany</Specification-Vendor>
<Implementation-Vendor>MyCompany</Implementation-Vendor>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>create-my-bundle</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>