簡體   English   中英

Java找不到傑克遜罐子文件

[英]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-annotationsjackson-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM