Course – LS – All
announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Introduction

In Java, we often come across the terms sourcepath and classpath. Although these terms may seem similar at first, they have different functions in the compilation and execution of a program. While both of them help locate files, they have some distinct differences.

In this tutorial, we’ll explore the nuances of sourcepath and classpath and understand the distinction in their usage.

2. sourcepath

sourcepath is used by the compiler to locate the source code files that are needed to compile the Java program. It specifies the directories where the compiler should look for source files when compiling the program.

If the source files are located in a directory or multiple directories, they are specified using the -sourcepath option during compilation.

3. Specifying sourcepath Through Command-Line

Suppose we have a project with the following directory structure:

my-project/
|-- src/
|   |-- Main.java
|   |-- Utils.java
|-- test/
|   |-- TestMain.java

The source files are in the src directory, and the test files are in the test directory. To compile the project, we need to specify the location of the source files using the -sourcepath option:

$ javac -sourcepath ./src/ ./src/Main.java ./src/Utils.java

This command tells the Java compiler to look for source files in the “src” directory. However, we still need to specify the path to each individual source file we want to compile relative to the source directory. This is necessary for the compiler to know the exact location of each source file within the source directory.

4. classpath

classpath is used by the JVM (Java Virtual Machine) to locate compiled classes and other resources that are needed to run the Java program. It specifies the directories where the JVM should look for class files when executing the program.

During the execution process, the Java interpreter uses the classpath to locate the compiled Java class files needed to run the program. The interpreter reads the bytecode from the class files and executes the program accordingly.

If the compiled classes are located in a directory or multiple directories, they are specified using the –classpath option during execution.

5. Specifying classpath Through Command-Line

Suppose we have a project with the following directory structure:

my-project/
|-- src/
|   |-- Main.java
|   |-- Utils.java

Here, the source files are in the src directory. To compile and run the project, we need to specify the classpath:

$ javac -classpath ./src/ ./src/Main.java ./src/Utils.java

This command tells the compiler to use the src directory for any external dependencies.

Once the code is compiled, we can run the program using the same classpath:

$ java -classpath src Main

This command tells the interpreter to use the compiled Main class file located in the src directory.

6. Using classpath With the javac and  java Commands

The javac command uses the –classpath option to specify the location of compiled .class files and external libraries (such as JAR files) needed by the Java compiler.

Similarly, the java command uses the -classpath option to specify the location of files and external libraries that the Java program needs to access during runtime.

7. Omitting sourcepath and Only Using classpath

If the -sourcepath option isn’t specified, the Java compiler searches for source files in the directories specified in the user classpath (specified with the -classpath option), as well as in the current working directory.

The -sourcepath option could be omitted if the source files are located in a directory that’s already included in the classpath. In this case, the compiler will still be able to find and compile the source files.

8. Conclusion

In this article, we learned some key differences between sourcepath and classpath. We also learned about their usage in the command line.

We can conclude that the sourcepath primarily serves the compiler, while the classpath serves the Java interpreter.

Course – LS – All
announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

res – REST with Spring (eBook) (everywhere)