J'obtiens l'erreur suivante lorsque j'essaie d'exécuter un programme Java qui utilise la classe ObjectMapper de jackon:
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
J'ai les annotations Jackson, la liaison de données (qui contient ObjectMapper) et les fichiers JAR de base dans mon référentiel Maven sous ~/.m2/repository/com/plus rapidexml/jackson/core/jackson- [nom du pack] /2.4.0. voici la section des dépendances de mon 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>
voici mon CLASSPATH:
:/Users/myusername/Library/Java/Extensions:/Library/Java/Extensions:/Users/myusername/.m2/repository
donc Maven sait tout sur ces fichiers JAR - où les trouver, où les placer, etc. - mais Java lui-même ne semble pas trouver les classes dont j'ai besoin. Que fais-je de mal? ? Merci!
essayez de refaire les objectifs du cycle de vie de maven:
mvn clean install -U
Le plugin maven par défaut ne construit pas un gros pot avec des dépendances.
Pour construire un pot contenant ses dépendances afin de pouvoir l'exécuter avec Java -jar
, nous pouvons utiliser maven-Assembly-plugin , qui conditionne le pot avec le nom xxx-jar-with-dependencies.jar
.
Voici un exemple 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>
Vous devriez maintenant pouvoir exécuter votre bocal avec
Java -jar xxx-jar-with-dependencies.jar