[英]Java can't find jackson jar file
我需要使用傑克遜來處理我的代碼中的一些JSON。 我編寫了一個簡單的測試類來使其工作。
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
}
}
我將jackson-databind-2.9.9.1.jar
放在/dirwherejarresides/jdk/jre/lib/ext
。
我能夠Test.class
地編譯該類,並生成Test.class
。
javac Test.java
但是,我似乎無法讓Java找到jar並執行該類。
java -cp "/dirwhereclassresides/java" Test Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonView
at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.<clinit>(JacksonAnnotationIntrospector.java:37)
at com.fasterxml.jackson.databind.ObjectMapper.<clinit>(ObjectMapper.java:291)
at Test.main(Test.java:5)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonView
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
我嘗試添加jar所在的路徑,但出現相同的錯誤。
java -cp "/dirwhereclassresides/java:/dirwherejarresides/jdk/jre/lib/ext/jackson-databind-2.9.9.1.jar" Test
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonView
at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.<clinit>(JacksonAnnotationIntrospector.java:37)
at com.fasterxml.jackson.databind.ObjectMapper.<clinit>(ObjectMapper.java:291)
at Test.main(Test.java:5)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonView
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 3 more
我需要做什么才能讓Java看到罐子?
傑克遜庫分為幾個jar模塊,這些模塊聲明了彼此之間的依賴關系。 例如: jackson-databind
取決於jackson-annotations
和jackson-core
。
jackson-databind-*.jar
實際上並不包含您所涉及的JsonView
批注的類。 它放置在jackson-annotations-*.jar
文件中。 但是要能夠用Jackson解析JSON,您肯定也需要jackson-core-*.jar
。
順便說一句,傳遞類路徑的第二種方法更正確,您需要在Unix / Linux系統上的-cp
參數中用冒號分隔列出類所依賴的所有jar文件。 例如
$ java -cp ".:/pathtojackson/jackson-databind-2.9.9.1.jar:/pathtojackson/jackson-core-2.9.9.jar:/pathtojackson/jackson-annotations-2.9.9.jar" Test
您還可以在-cp
參數中使用star-expressions,請參見https://stackoverflow.com/a/219801/2288384
它抱怨annotation/JsonView
,似乎找到了jackson data-bind
。 由於您未使用Maven,因此我懷疑未插入作為數據綁定的傳遞依賴項的jackson-core
。
嘗試將jackson-core
添加到您的類路徑中。
通常,ClassNotFoundException是使兩個相同軟件包具有不同版本的副作用。 打印出一個依賴關系樹,查看沒有加載相同依賴關系的兩個版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.