Запуск 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 секунды) при последующих запусках.