2014-09-26 26 views
9

ottengo il seguente errore quando si tenta di eseguire un programma Java che utilizza classe ObjectMapper di Jackon:java.lang.ClassNotFoundException/NoClassDefFoundError per com/fasterxml/Jackson/databind/ObjectMapper con Maven

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 

ho la Annotazioni di Jackson, database (che contiene ObjectMapper) e core JAR nel mio repository Maven sotto ~/.m2/repository/com/fasterxml/jackson/core/jackson- [nomepacchetto] /2.4.0. ecco la sezione dipendenze del mio pom.xml:

<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> 

Ecco il mio CLASSPATH:

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

modo Maven sa tutto di questi vasi - Dove ottenere em, dove poter mettere em, ecc - ma java non sembra in grado di trovare le classi di cui ho bisogno. Che cosa sto facendo di sbagliato?? Grazie!

+0

dare un'occhiata a http://stackoverflow.com/questions/18429468/correct- set-of-dependencies-per-using-jackson-mapper –

+0

grazie Frederic. Ho risolto il mio problema copiando i Jackson JAR in ~/Library/Java/Extensions. Non sono ancora sicuro del motivo per cui sono stato in grado di eseguire il mio programma in precedenza, senza averlo fatto. Immagino che Maven usi il suo repository JAR, quando esegui un programma tramite il plugin exec, ma il comando java no. anche questo non spiega perché java non sia riuscito a trovare Jackson quando ho passato la posizione dei JAR tramite l'opzione -cp della riga di comando. –

risposta

2

cercare di rifare gli obiettivi del ciclo di vita Maven: plugin di Maven

mvn clean install -U 
2

Il valore di default non costruisce un barattolo di grasso con dipendenze.

per costruire un vaso in bundle con le sue dipendenze in modo che possiamo eseguire con java -jar, possiamo usare maven-assembly-plugin, quali pacchetti il ​​vaso con il nome xxx-jar-with-dependencies.jar.

Ecco un esempio 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> 

Ora si dovrebbe essere in grado di eseguire il vaso con

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