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 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 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 Maven: Compiles your Java files and puts them in target/classes/. Fetches dependencies from ~/.m2/repository/. 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 3. Viewing the Current Classpath Method 1: Print Classpath in Java System.out.println(System.getProperty("java.class.path")); 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 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 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.

Jan 30, 2025 - 11:43
 0
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

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

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

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

3. Viewing the Current Classpath

Method 1: Print Classpath in Java

System.out.println(System.getProperty("java.class.path"));

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

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

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.