JBig2 не разрешается во время выполнения?

У меня есть приложение Java/Gradle, которое использует PDFBox для преобразования PDF-файлов в PNG. При локальном тестировании в моей IDE мой код выглядит следующим образом:

public static void main(String[] args) throws IOException {
    PDDocument doc = PDDocument.load(new File("pdfFile.pdf"));
    PDFRenderer renderer = new PDFRenderer(doc);
    OutputStream os = new FileOutputStream(new File("image.png"));
    ImageIO.write(renderer.renderImageWithDPI(0, 300), "png", os);
}

В prod другое приложение запускает новую JVM, которая запускает мое приложение. Я не уверен, какой путь к классам для родительского приложения, но имеет ли это значение, если в моих зависимостях Gradle есть следующее?

implementation "org.apache.pdfbox:jbig2-imageio:3.0.2"

При тестировании моего основного метода локально в моей среде IDE он работает нормально, но не использует вторую настройку, которую я описал. Я также проверил свой манифест и вижу следующие файлы:

META-INF/services/javax.imageio.spi.ImageReaderSpi
META-INF/services/javax.imageio.spi.ImageWriterSpi 

Что мне не хватает?

0 ответов

Я отвечаю на ваш комментарий как на ответ, поскольку в противном случае форматирование / пространство ограничено.

Мы используем slf4j для "перенаправления" всех журналов обычных пользователей в log4j. Вы должны добавить в свой журнал следующую зависимость - затем, после добавления приложения для pdfbox, он войдет в ваш стандартный файл журнала...

<!-- PdfBox is using Apache commons logging. To force this to use log4j2 the following lib has to be used -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.30</version>
</dependency>

На ваш второй вопрос: нет, не обязательно. Все ли библиотеки доступны в пути к классам? Без сообщения об ошибке очень сложно понять, что именно происходит. Вы видите консоль? Если да, то используйте следующий код, чтобы проверить, есть ли там ваши классы.

try {
    Class<?> clazz = Class.forName("org.apache.pdfbox.pdmodel.PDDocument");
} 
catch (ClassNotFoundException e) {
    System.err.println("PdfBox classes not found!");
}
Другие вопросы по тегам