2014-09-26 2 views
9

내가 JACKON의 ObjectMapper 클래스를 사용하는 자바 프로그램을 실행하려고 다음과 같은 오류 얻을과 :java.lang.ClassNotFoundException가/NoClassDefFoundError를위한 COM/fasterxml/잭슨/데이터 바인딩/ObjectMapper 메이븐

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper 
    at com.inin.dynamotransfer.DynamoTransfer.importData(DynamoTransfer.java:133) 
    at com.inin.dynamotransfer.DynamoTransfer.main(DynamoTransfer.java:67) 
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper 
    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) 
    ... 2 more 

을 나는이 잭슨 주석, Databind (ObjectMapper 포함) 및 ~/.m2/repository/com/fasterxml/jackson/core/jackson- [packagename] /2.4.0 아래에있는 메이븐 저장소의 핵심 JAR

여기
<dependencies> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.4.0</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.4.0</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.4.0</version> 
    </dependency> 
</dependencies> 

내 CLASSPATH입니다 : 여기 내 pom.xml 파일의 종속 섹션이다 - 안에, 어디서, 등을 안에 넣어 갈 수 -

:/Users/myusername/Library/Java/Extensions:/Library/Java/Extensions:/Users/myusername/.m2/repository 

그렇게 메이븐이 JAR 파일에 대해 모두 알고는 있지만, 자바 자체가 내가 필요한 클래스를 찾을 수없는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?? 감사!

+0

로 항아리를 실행할 수 있어야 샘플 지금 pom.xml

<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.yourMain</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 

입니다 http://stackoverflow.com/questions/18429468/correct-를 보라 종속성 - for-use-jackson-mapper –

+0

감사 Frederic. 잭슨 JAR을 ~/Library/Java/Extensions에 복사하여 문제를 해결했습니다. 나는 왜 이전에 내 프로그램을 실행할 수 있었는지 확실하지 않습니다. Exec 플러그인을 통해 프로그램을 실행할 때 Maven이 JAR 저장소를 사용하지만 java 명령은 사용하지 않는다고 생각합니다. 또한 커맨드 라인 -cp 옵션을 통해 JAR의 위치를 ​​전달할 때 왜 자바가 잭슨을 찾을 수 없었는지 설명하지 못합니다. –

답변

2

받는다는 라이프 사이클 목표를 다시 실행 해보십시오

mvn clean install -U 
2

기본 받는다는 플러그인 종속성 지방 항아리를 구축하지 않습니다.

종속 항목을 java -jar과 함께 실행할 수 있도록 jar 파일을 빌드하려면 maven-assembly-plugin을 사용하면 jar 파일 이름은 xxx-jar-with-dependencies.jar입니다. 여기

java -jar xxx-jar-with-dependencies.jar