Skip to main content

What do you need to do to run a class with a main() method in a package?

Example: Say, you have a class named "Pet" in a project folder "c:\myProject" and package named com.xyz.client, will you be able to compile and run it as it is?

package com.xyz.client;

public class Pet {

public static void main(String[] args) {

System.out.println("I am found in the classpath");

}

}

To run 􀃆 c:\myProject> java com.xyz.client.Pet


The answer is no and you will get the following exception: "Exception in thread "main" java.lang.-

NoClassDefFoundError: com/xyz/client/Pet". You need to set the classpath. How can you do that? One of the following ways:

1. Set the operating system CLASSPATH environment variable to have the project folder "c:\myProject". [Shown in the above diagram as the System –classpath class loader]

2. Set the operating system CLASSPATH environment variable to have a jar file "c:/myProject/client.jar", which has the Pet.class file in it. [Shown in the above diagram as the System –classpath class loader].

3. Run it with –cp or –classpath option as shown below:

c:\>java –cp c:/myProject com.xyz.client.Pet

OR

c:\>java -classpath c:/myProject/client.jar com.xyz.client.Pet

Important: Two objects loaded by different class loaders are never equal even if they carry the same values, which mean a class is uniquely identified in the context of the associated class loader. This applies to singletons too, where each class loader will have its own singleton.

Comments