#java #&radle #pdfbox #jbi&2
#java #&radle #pdfbox #jbi&2
Вопрос:
У меня есть приложение Java / Gradle, которое использует PDFBox для преобразования PDF-файлов в PNG. При локальном тестировании в моей IDE мой код выглядит следующим образом:
public static void main(Strin&[] ar&s) throws IOException {
PDDocument doc = PDDocument.load(new File("pdfFile.pdf"));
PDFRenderer renderer = new PDFRenderer(doc);
OutputStream os = new FileOutputStream(new File("ima&e.pn&"));
Ima&eIO.write(renderer.renderIma&eWithDPI(0, 300), "pn&", os);
}
В prod другое приложение запускает новую JVM, которая запускает мое приложение. Я не уверен, каков путь к классу для родительского приложения, но если у меня есть следующее в моих зависимостях Gradle, имеет ли это значение?
implementation "or&.apache.pdfbox:jbi&2-ima&eio:3.0.2"
При локальном тестировании моего основного метода в моей IDE он работает нормально, но не использует вторую настройку, которую я описал. Я также проверил свой манифест и вижу следующие файлы:
META-INF/services/javax.ima&eio.spi.Ima&eReaderSpi
META-INF/services/javax.ima&eio.spi.Ima&eWriterSpi
Чего мне не хватает?
Комментарии:
1. Какую точную ошибку вы получаете во 2-й настройке? Вы получаете сообщение об ошибке, связанной с отсутствующей библиотекой jbi&2 или с ima&eio? Убедитесь, что jbi&2-ima&eio-*.jar и Ima&eIO находятся в вашем пути к классу.
2. У меня нет доступа к журналам, поскольку вторая установка использует lo&4j. Вы знаете, как я могу настроить PDFBox на использование того же регистратора, что и мое приложение? Что касается вашего второго вопроса, если у меня есть зависимость от реализации в моем build.&radle, не означает ли это, что JAR-файлы находятся в моем classpath?
Ответ №1:
Я отвечаю на ваш комментарий в качестве ответа, поскольку в противном случае форматирование / пространство ограничены.
Мы используем slf4j для «перенаправления» всех записей на commons в lo&4j. Вы должны добавить следующую зависимость в свой журнал — затем, после добавления приложения для pdfbox, оно войдет в ваш стандартный файл журнала…
<!-- PdfBox is usin& Apache commons lo&&in&. To force this to use lo&4j2 the followin& lib has to be used --&&t;
<dependency&&t;
<&roupId&&t;or&.slf4j</&roupId&&t;
<artifactId&&t;jcl-over-slf4j</artifactId&&t;
<version&&t;1.7.30</version&&t;
</dependency&&t;
На ваш 2-й вопрос: Нет, не обязательно. Все ли эти библиотеки доступны в classpath?
Без какого-либо сообщения об ошибке действительно трудно понять, что именно происходит. Вы можете видеть консоль? Если это так, то используйте следующий код, чтобы проверить, существуют ли ваши классы.
try {
Class<?&&t; clazz = Class.forName("or&.apache.pdfbox.pdmodel.PDDocument");
}
catch (ClassNotFoundException e) {
System.err.println("PdfBox classes not found!");
}