Запуск EPubCheck внутри Nailgun или Drip

Инструмент epubcheck.jar из IDPF/W3 расширяется, чтобы охватить новые возможности в ePub. Таким образом, количество библиотек, необходимых для проверки всего, увеличивается. Это увеличивает время выполнения для завершения проверки одного файла ePub. epubcheck v3 занимал около 3 с на epub, а epubcheck v4 - до 6,5 с. Загрузочных библиотек в два раза больше.

В связи с этим я искал способы поддержания работоспособности версии epubcheck, чтобы JVM не нужно было запускать и перезагружать каждую библиотеку для каждого файла. (Иногда приходится проверять сотни эпубов одновременно.)

Возможные решения для уменьшения накладных расходов на загрузку библиотеки и времени запуска JVM - это Drip или Nailgun, но для загрузки библиотек и вызова epubcheck по команде все файлы jar должны быть загружены в classpath. Затем класс com.adobe.epubcheck.tool.Checker должен быть вызван явно.

Используя Drip и Nailgun, я получаю ту же ошибку SAXParseException:

org.xml.sax.SAXParseException; systemId: jar: file: /app-lib/epubcheck-4.0.2/epubcheck.jar! /com/adobe/epubcheck/schema/20/rng/container.rng; номер строки: 4; номер столбца: 71; корневой элемент схемы должен иметь пространство имен

Это файл, который очень хорошо проверяет загрузку JAR-файла в командной строке:

java -jar /app-lib/epubcheck-4.0.2/epubcheck.jar FILE.epub

Я в недоумении относительно того, в чем может быть проблема, тем более, что Java не моя сильная сторона.

1 ответ

Оказывается, у Red Hat есть собственная версия библиотеки синтаксического анализатора SAX, которая наступила на ту, что была в epubcheck. Я запускал Drip и Nailgun с системными библиотеками, включенными в classpath.

Запуск Nailgun (или Drip) без общих системных библиотек удалил ошибку SAXParseException.

Для Nailgun:

java -cp "/usr/share/java/nailgun-server-0.9.3-SNAPSHOT.jar:/app-lib/epubcheck-4.0.2/*:/app-lib/epubcheck-4.0.2/lib/*" com.martiansoftware.nailgun.NGServer 127.0.0.1

затем для клиента NG:

ng com.adobe.epubcheck.tool.Checker FILE.epub

Для капельного:

drip -cp "/app-lib/epubcheck-4.0.2/*:/app-lib/epubcheck-4.0.2/lib/*" com.adobe.epubcheck.tool.Checker FILE.epub

Что бы это ни стоило, Drip на самом деле не делает то, что мне было нужно, так как резервная JVM вращается с заранее заданными настройками java и classpath, но экземпляр класса по-прежнему вызывает загрузку библиотек с нуля. Его скорость точно такая же, как у команды java.

Nailgun запускается на полную ставку в первый раз (5-7 секунд), затем намного быстрее (0,8-1,3 секунды) при последующих запусках.

Другие вопросы по тегам