java获取ClassNotFoundException:com。fasterxml。杰克逊。果心从servlet调用Jackson JSON解析器时发生JsonProcessingException
我有一个由Tomcat8支持的servlet,它调用一个静态方法来使用Jackson 2.9.6执行JSON解析
在代码执行期间:
JSONData parsedJSONData = PDFGenerator.parseJSONDocument(jsonDocument);
我得到:
java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException
需要注意的是,servlet类和PDFGenerator
类位于不同的包中,但具有public
访问修饰符
我试图通过pom将依赖项添加到项目的根目录中。xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
但这没用
在我的项目中,我没有使用Maven,而是通过classpath
添加了所需的库
奇怪的是,只有当我试图从servlet调用PDFGenerator.parseJSONDocument(jsonDocument)
时,这种异常才会出现,而从常规Java类执行时,这种异常才能顺利进行
我的问题:
为了能够使用基于FasterXML/Jackson JSON库的JSON解析器功能调用静态方法,我应该添加什么内容和位置
# 1 楼答案
这个问题几乎肯定是由于servlet容器(Tomcat 8.x)中的类加载器无法找到Jackson的库/JAR造成的。在servlet容器中加载类/lib的方式不同于独立Java应用程序的标准类路径声明。这就是为什么您会在servlet引擎中看到错误,而不是在直接执行类的过程中看到错误。下面是关于如何使用Tomcat8的一般文档。x处理类加载:
https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html
一般来说,为了从一开始就有助于防止此类问题,最好在“webapp”容器中部署servlet,其中包括所有必需的库(所需JAR的适当版本等)。这样做会将servlet隔离在单个类加载器下,并自动将它们定位到正确的层次结构中。请参阅链接文档的这一部分:
仅供参考,对于企业级web应用程序,还有其他方法可以做到这一点,但我们这里不讨论这一点