java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext maven

34,405

Your pom.xml creates a jar file which contains only the classes defined in your project. But all the other dependencies (spring-core, spring-context-support) which are required by your application aren't included.

If your application is started within eclipse, eclipse integrates these required jar files to the classpath of the application and so it is able to run.
If your application is started from CMD the spring classes can't be found in the classpath and you get a java.lang.NoClassDefFoundError.

It's possible to name all the required jars manually when the application is started from CMD (classpath), but is much easier to created a so called self contained jar file, which has all of them already included. This can be done using maven-assembly-plugin.

An example how to create a self contained jar file can be found here.

The application in a self contained jar can be started now from CMD:
java -jar name_of_your_project-jar-with-dependencies.jar

Share:
34,405
Adnan
Author by

Adnan

Updated on July 09, 2022

Comments

  • Adnan
    Adnan almost 2 years

    I am new to spring and maven. I have a simple hello world project using Spring . The project builds successfully but i face the following error at runtime:

    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
    

    This is the main app: App.java

    package com.test.SpringMaven2;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    
    
    /**
     * Hello world!
     *
     */
    public class App 
    {
        public static void main( String[] args )
        {
            System.out.println( "Hello World!" );
            System.out.println( "Hello World!" );
            ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfig.class);
    
            HelloWorld hello = (HelloWorld) context.getBean("helloWorld"); 
            hello.setName("Adnan");
            hello.getName();
        }
    }
    

    This is the HelloWorld bean

    package com.test.SpringMaven2;
    
    public class HelloWorld{
    
    
        private String name; 
    
        public void setName(String name){
            this.name = name;
        }
    
        public void getName(){
            System.out.println("Hello, " + name);
        }
    }
    

    This is the annotation based configuration file:

    package com.test.SpringMaven2;
    
    
    import org.springframework.context.annotation.*;
    
    @Configuration
    public class HelloWorldConfig{
    
        @Bean
        public HelloWorld helloWorld(){
            return new HelloWorld(); 
        }
    
    }
    

    This is my pom.xml

    <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.test</groupId>
      <artifactId>SpringMaven2</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>SpringMaven2</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-core</artifactId>
     <version>4.3.3.RELEASE</version>
    </dependency>
      </dependencies>
    </project>
    

    I am running the following command in CMD to run the application: java -cp {nameofresultjarfile} com.test.SpringMaven2.App

    But getting the error messsage above

    Any advice?

    Thanks