【发布时间】:2020-07-22 09:12:07
【问题描述】:
我们的服务器中随机出现 NoClassDefFoundError。它偶尔会抛出此错误,并且大多数时候它运行时不会抛出任何问题。这种奇怪行为的原因可能是什么?以下是例外情况。
java.lang.NoClassDefFoundError: Could not initialize class com.github.junrar.Archive
at org.apache.tika.parser.pkg.RarParser.parse(RarParser.java:75)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:143)
at org.apache.tika.Tika.parseToString(Tika.java:527)
at org.apache.tika.Tika.parseToString(Tika.java:602)
at com.xxx.attachment.AttachmentExtractionAPI.parse(AttachmentExtractionAPI.java:108)
com.github.junrar.Archive 存在于包含其他 tika 依赖项的同一个 jar 中。
我尝试查看 Archive.java 的 source。在静态块中寻找一些可能的运行时异常。但它本身没有静态块。是什么让它随机抛出异常并且有时运行没有任何问题?
编辑:-
我们使用 ant 来构建。下面是 ant.properties 中控制 tika 依赖关系的部分。 Junrar 作为 tika 的一部分提供。
tika_jar_file=${prod_home}/tikalib/tika-app-1.24.jar
tika_jar_srcdir=${tp_pkg}/tika
tika_jar_includes=**
tika_jar_excludes=org/apache/tika/parser/** org/apache/xerces/** org/apache/html/** org/apache/wml/** org/apache/xml/** org/xml/sax/** org/apache/xmlcommons/** javax/xml/** org/w3c/dom/**
tika_update_jar_file=${prod_home}/tikalib/tika-app-1.24.jar
tika_update_jar_srcdir=${tp_pkg}/tika
tika_update_jar_includes=org/apache/tika/parser/asm/** org/apache/tika/parser/chm/** org/apache/tika/parser/code/** org/apache/tika/parser/epub/** org/apache/tika/parser/html/** org/apache/tika/parser/iwork/** org/apache/tika/parser/mail/** org/apache/tika/parser/mbox/** org/apache/tika/parser/microsoft/** org/apache/tika/parser/odf/** org/apache/tika/parser/pdf/** org/apache/tika/parser/pkg/** org/apache/tika/parser/rtf/** org/apache/tika/parser/strings/** org/apache/tika/parser/txt/** org/apache/tika/parser/utils/** org/apache/tika/parser/xml/** org/apache/tika/parser/*.* org/apache/tika/parser/image/** org/apache/tika/parser/ocr/** org/apache/tika/parser/csv/** javax/xml/bind/**
tika_update_jar_excludes=
tika_update_jar_update=true
【问题讨论】:
-
我只看到
private static Logger logger = Logger.getLogger(Archive.class.getName());是在静态上下文中运行的代码。理论上可以抛出 OOM。 -
获取记录器时出现OOM?将检查可能性。
标签: java ant noclassdeffounderror