This is a similar question as the one here, which is unfortunately unresolved yet.
If you want to debug the code, here is the GitHub repo.
I got the following NoClassDefFoundError
for ObjectMapper
though I have added the related dependency to Mave pom.xml
.
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
at demo.DemoMain.main(DemoMain.java:10)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Here is the source code DemoMain.java
package demo;
import com.fasterxml.jackson.databind.ObjectMapper;
public class DemoMain {
public static void main(String[] args) {
System.out.println("Start");
ObjectMapper mapper = new ObjectMapper();
System.out.println("End");
}
}
This is my pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>demo.DemoMain</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
I compile and run the app by
mvn clean install
java -jar target/Demo-1.0-SNAPSHOT.jar
mvn clean install
build success? – Esotericmvn clean install
is successful. – Trajectmvn clean install
does not create any .jar file. So what .jar file you are running on? – Esoterictarget/Demo-1.0-SNAPSHOT.jar
. Anyway, I figure out the issue. The maven plugin I was using doesn't build a fat jar that comes with dependencies. To run the jar withjava -jar
, we can usemaven-assembly-plugin
instead, which bundles the jar with its dependencies. By the way, the reason why an IDE works is because it adds the classpath flag automatically when running the app. Thanks for helping me troubleshoot. – Traject