How is CompileTime classpath different from RunTime classpath in Java?

What is a Classpath?
Classpath refers to the Path where all the classes/jars are available.

What is Compile-time classpath?
This classpath has all the classes/jars required to compile the application without any syntax error.

Now we might think that our project compiled successfully so it will execute nicely. But this is not always true why because in some cases(explained below) to execute the project successfully you may need some other class/jars at runtime. That is why run-time classpath comes into the picture.



What is Run-time classpath?
Classpath that has all the classes/jars required to execute the application successfully.

Setting classpath: Just add the dependencies in the pom.xml file will automatically add the jars in classpath.

sample pom.xml

filter_none

edit
close

play_arrow

link
brightness_4
code

<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.softvision</groupId>
    <artifactId>SpringMVC</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>SpringMVC Json Webapp</name>
    <url>http://maven.apache.org</url>
  
    <properties>
        <spring.version>3.2.2.RELEASE</spring.version>
        <jackson.version>1.9.10</jackson.version>
        <jdk.version>1.6</jdk.version>
    </properties>
  
    <dependencies>
  
        <!-- Spring 3 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
  
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
  
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
  
        <!-- Jackson JSON Mapper -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jackson.version}</version>
        </dependency>
  
    </dependencies>
  
</project>

chevron_right



Note: Classpath setting will be done by eclipse or any other IDE automatically. This can’t be shown here.

How is CompileTime classpath different from RunTime classpath?

  • Case-1: Let’s say we are developing a Spring-MVC web application to post the JSON data. So in order to achieve it, we need Jackson jar to map the JSON data to the DTO class. If we don’t have this jar in the classpath then at the compile time we won’t get any error but our application will not execute properly because it needs Jackson for data binding at the runtime that is not available.

    That is why we say compile-time and run-time classpath are different.

  • Case-2: While developing servlet based application we need servlet-api.jar so we can use HttpServlet, HttpServletRequest, HttpServletResponse, etc while writing code and end up in no compilation error. At this point, we are using servlet-API that is just specification not the actual implementation of the servlet-API.

    Actually, the implementation is the JEE container that is required to run the servlet based application. So what I am trying to say that while running such an application the JEE container will provide the implementation classes at runtime to successfully run it without the JEE container application will not run.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : Chirag Soni



Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.