0

IDPF/W3 的 epubcheck.jar 工具正在扩展以涵盖 ePub 中的新可能性。因此,检查所有内容所需的库数量正在增加。这增加了完成单个 ePub 文件检查的运行时间。epubcheck v3 每个 epub 大约需要 3 秒,而 epubcheck v4 最多需要 6.5 秒。有大约两倍的底层库要加载。

因此,我一直在寻找保持 epubcheck 版本运行的方法,这样 JVM 就不必为每个文件启动和重新加载每个库。(我们有时必须一次检查数百个 epub。)

减少库加载开销和 JVM 启动时间的可能解决方案是 Drip 或 Nailgun,但为了加载库并在命令上调用 epubcheck,jar 文件都必须加载到类路径中。然后,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 不是我的强项。

4

1 回答 1

0

事实证明,Red Hat 有自己的 SAX 解析器库版本,它踩到了 epubcheck 的脚趾。我使用类路径中包含的系统库来启动 Drip 和 Nailgun。

在没有共享系统库的情况下启动 Nailgun(或 Drip)消除了 SAXParseException 错误。

对于钉枪:

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 设置和类路径启动,但是类的实例仍然会导致库从头开始加载。它的速度与“java”命令完全相同。

Nailgun 第一次全时运行(5-7 秒),然后在后续运行中更快(0.8-1.3 秒)。

于 2018-04-17T21:27:10.643 回答