DEV Community

Hunor Vadasz-Perhat
Hunor Vadasz-Perhat

Posted on

maven-006: maven-classpath

The classpath is not a physical folder but rather a list of locations (directories and JAR files) that the JVM uses to find classes at runtime.

Clarification: Classpath vs. Maven Repository

Concept What it is?
Classpath A runtime list of directories and JARs where Java looks for .class files when executing a program.
Maven Repository (~/.m2/repository/) A local folder where Maven downloads and stores dependencies. It is not the classpath itself, but dependencies from here can be included in the classpath.

1. What Exactly is the Classpath?

  • The classpath is a set of directories and JAR files.
  • When you run a Java application, the JVM loads classes only from the classpath.
  • It includes:
    • Your compiled .class files (from target/classes).
    • JAR files from dependencies.

Example:
If your project has:

  • Your compiled files in target/classes/
  • Dependencies in ~/.m2/repository/

Then your classpath might look like:

target/classes:~/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.0.0/spring-boot-starter-web-3.0.0.jar
Enter fullscreen mode Exit fullscreen mode

2. How is the Classpath Defined?

(a) When Running a Java Program Manually

You can explicitly set the classpath when running a Java program:

java -cp target/classes:~/.m2/repository/.../spring-boot-starter-web-3.0.0.jar com.example.MyApplication
Enter fullscreen mode Exit fullscreen mode

Here:

  • -cp (or CLASSPATH variable) defines the classpath.
  • target/classes contains your compiled .class files.
  • The spring-boot-starter-web.jar is needed for Spring Boot.

(b) When Running a Maven Project

Maven automatically sets the classpath when you run:

mvn spring-boot:run
Enter fullscreen mode Exit fullscreen mode

Maven:

  1. Compiles your Java files and puts them in target/classes/.
  2. Fetches dependencies from ~/.m2/repository/.
  3. Starts the application with a fully configured classpath.

(c) When Running from IntelliJ

  • IntelliJ automatically sets up the classpath.
  • If you go to Run > Edit Configurations, you’ll see:
  Classpath: target/classes + Maven Dependencies
Enter fullscreen mode Exit fullscreen mode

3. Viewing the Current Classpath

Method 1: Print Classpath in Java

System.out.println(System.getProperty("java.class.path"));
Enter fullscreen mode Exit fullscreen mode

It prints:

/home/user/project/target/classes:/home/user/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.0.0/spring-boot-starter-web-3.0.0.jar
Enter fullscreen mode Exit fullscreen mode

Method 2: Check Classpath in IntelliJ

  • Go to Run > Edit Configurations.
  • Look under Java Options → You’ll see all JARs included in the classpath.

Method 3: Use Maven

mvn dependency:tree
Enter fullscreen mode Exit fullscreen mode

Shows all dependencies included in the classpath.


4. Key Takeaways

Classpath is NOT a folder but a runtime list of locations (directories + JARs).

Maven downloads dependencies to ~/.m2/repository/, but this is NOT automatically the classpath.

When running a Spring Boot app, JVM loads .class files and dependencies from the classpath.

You can manually define the classpath using java -cp or check it in IntelliJ.

Top comments (0)