Classpath (Java)
   HOME

TheInfoList



OR:

Classpath is a parameter in the Java Virtual Machine or the
Java compiler A Java compiler is a compiler for the programming language Java. The most common form of output from a Java compiler is Java class files containing platform-neutral Java bytecode, but there are also compilers that output optimized native machine ...
that specifies the location of user-defined classes and
packages Package may refer to: Containers or Enclosures * Packaging and labeling, enclosing or protecting products * Mail, items larger than a letter * Chip package or chip carrier * Electronic packaging, in electrical engineering * Automotive package, ...
. The parameter may be set either on the
command-line A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
, or through an
environment variable An environment variable is a dynamic-named value that can affect the way running processes will behave on a computer. They are part of the environment in which a process runs. For example, a running process can query the value of the TEMP envi ...
.


Overview and architecture

Similar to the classic dynamic loading behavior, when executing
Java Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mos ...
programs, the Java Virtual Machine finds and loads classes lazily (it loads the
bytecode Bytecode (also called portable code or p-code) is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references (norma ...
of a class only when the class is first used). The classpath tells Java where to look in the filesystem for files defining these classes. The virtual machine searches for and loads classes in this order: # bootstrap classes: the classes that are fundamental to the
Java Platform Java is a set of computer software and specifications developed by James Gosling at Sun Microsystems, which was later acquired by the Oracle Corporation, that provides a system for developing application software and deploying it in a cro ...
(comprising the public classes of the
Java Class Library The Java Class Library (JCL) is a set of dynamically loadable libraries that Java Virtual Machine (JVM) languages can call at run time. Because the Java Platform is not dependent on a specific operating system, applications cannot rely on any of ...
, and the private classes that are necessary for this library to be functional). # extension classes:
packages Package may refer to: Containers or Enclosures * Packaging and labeling, enclosing or protecting products * Mail, items larger than a letter * Chip package or chip carrier * Electronic packaging, in electrical engineering * Automotive package, ...
that are in the ''extension'' directory of the
Java Runtime Environment Java is a set of computer software and specifications developed by James Gosling at Sun Microsystems, which was later acquired by the Oracle Corporation, that provides a system for developing application software and deploying it in a cros ...
or
JDK The Java Development Kit (JDK) is a distribution of Java Technology by Oracle Corporation. It implements the Java Language Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the Java ...
, jre/lib/ext/ # user-defined packages and libraries By default only the packages of the
JDK The Java Development Kit (JDK) is a distribution of Java Technology by Oracle Corporation. It implements the Java Language Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the Java ...
standard API and extension packages are accessible without needing to set where to find them. The path for all user-defined
packages Package may refer to: Containers or Enclosures * Packaging and labeling, enclosing or protecting products * Mail, items larger than a letter * Chip package or chip carrier * Electronic packaging, in electrical engineering * Automotive package, ...
and libraries must be set in the command-line (or in the
Manifest Manifest may refer to: Computing * Manifest file, a metadata file that enumerates files in a program or package * Manifest (CLI), a metadata text file for CLI assemblies Events * Manifest (convention), a defunct anime festival in Melbourne, Aus ...
associated with the Jar file containing the classes).


Setting the path to execute Java programs


Supplying as application argument

Suppose we have a package called ''org.mypackage'' containing the classes: * ''HelloWorld'' (main class) * ''SupportClass'' * ''UtilClass'' and the files defining this package are stored physically under the directory ''D:\myprogram'' (on
Windows Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for ser ...
) or ''/home/user/myprogram'' (on
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, w ...
). The file structure looks like this: When we invoke Java, we specify the name of the application to run: org.mypackage.HelloWorld. However we must also tell Java where to look for the files and directories defining our package. So to launch the program, we use the following command: where: * java is the Java runtime launcher, a type of SDK Tool (A command-line tool, such as
javac javac (pronounced "java-see") is the primary Java compiler included in the Java Development Kit (JDK) from Oracle Corporation. Martin Odersky implemented the GJ compiler, and his implementation became the basis for javac. The compiler accepts ...
,
javadoc Javadoc (originally cased JavaDoc) is a documentation generator created by Sun Microsystems for the Java language (now owned by Oracle Corporation) for generating API documentation in HTML format from Java source code. The HTML format is used for ...
, or
apt Apt. is an abbreviation for apartment. Apt may also refer to: Places * Apt Cathedral, a former cathedral, and national monument of France, in the town of Apt in Provence * Apt, Vaucluse, a commune of the Vaucluse département of France * A ...
) * ''-classpath D:\myprogram'' sets the path to the packages used in the program (on Linux, ''-cp /home/user/myprogram'') and * ''org.mypackage.HelloWorld'' is the name of the main class


Setting the path through an environment variable

The
environment variable An environment variable is a dynamic-named value that can affect the way running processes will behave on a computer. They are part of the environment in which a process runs. For example, a running process can query the value of the TEMP envi ...
named CLASSPATH may be alternatively used to set the classpath. For the above example, we could also use on Windows: D:\myprogram>set CLASSPATH=D:\myprogram D:\myprogram>java org.mypackage.HelloWorld The rule is that -classpath option, when used to start the java application, overrides the CLASSPATH environment variable. If none are specified, the
current working directory In computing, the working directory of a process is a directory of a hierarchical file system, if any, dynamically associated with each process. It is sometimes called the current working directory (CWD), e.g. the BSD getcwd function, or just ...
is used as classpath. This means that when our working directory is D:\myprogram\ (on Linux, /home/user/myprogram/), we would not need to specify the classpath explicitly. When overriding however, it is advised to include the current folder "." into the classpath in the case when loading classes from current folder is desired. The same applies not only to java launcher but also to
javac javac (pronounced "java-see") is the primary Java compiler included in the Java Development Kit (JDK) from Oracle Corporation. Martin Odersky implemented the GJ compiler, and his implementation became the basis for javac. The compiler accepts ...
, the java compiler.


Setting the path of a Jar file

If a program uses a supporting library enclosed in a Jar file called ''supportLib.jar'', physically located in the directory ''D:\myprogram\lib\'' and the corresponding physical file structure is:
D:\myprogram\
      , 
      ---> lib\
            , 
            ---> supportLib.jar
      , 
      ---> org\
            , 
            --> mypackage\
                       , 
                       ---> HelloWorld.class
                       ---> SupportClass.class
                       ---> UtilClass.class
the following command-line option is needed: java -classpath D:\myprogram;D:\myprogram\lib\supportLib.jar org.mypackage.HelloWorld or alternatively:


Adding all JAR files in a directory

In Java 6 and higher, one can add all jar-files in a specific directory to the classpath using wildcard notation. Windows example: Linux example: This works for both -classpath options and environment classpaths.


Setting the path in a manifest file

If a program has been enclosed in a Jar file called ''helloWorld.jar'', located directly in the directory ''D:\myprogram'', the directory structure is as follows:
D:\myprogram\
      , 
      ---> helloWorld.jar 
      , 
      ---> lib\  
            , 
            ---> supportLib.jar
The
manifest file A manifest file in computing is a file containing metadata for a group of accompanying files that are part of a set or coherent unit. For example, the files of a computer program may have a manifest describing the name, version number, license and t ...
defined in ''helloWorld.jar'' has this definition: The
manifest file A manifest file in computing is a file containing metadata for a group of accompanying files that are part of a set or coherent unit. For example, the files of a computer program may have a manifest describing the name, version number, license and t ...
should end with either a new line or carriage return. The program is launched with the following command: java -jar D:\myprogram\helloWorld.jar pp arguments This automatically starts ''org.mypackage.HelloWorld'' specified in class ''Main-Class'' with the arguments. The user cannot replace this class name using the invocation . ''Class-Path'' describes the location of ''supportLib.jar'' relative to the location of the library ''helloWorld.jar''. Neither absolute file path, which is permitted in parameter on the command line, nor jar-internal paths are supported. This means that if the main class file is contained in a jar, ''org/mypackage/HelloWorld.class'' must be a valid path on the root within the jar. Multiple classpath entries are separated with spaces:


OS specific notes

Being closely associated with the file system, the
command-line A command-line interpreter or command-line processor uses a command-line interface (CLI) to receive commands from a user in the form of lines of text. This provides a means of setting parameters for the environment, invoking executables and pro ...
Classpath syntax depends on the operating system. For example: * on all
Unix-like A Unix-like (sometimes referred to as UN*X or *nix) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Unix-li ...
operating systems (such as
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, w ...
and
Mac OS X macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac computers. Within the market of desktop and la ...
), the directory structure has a Unix syntax, with separate file paths separated by a colon (":"). * on
Windows Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for ser ...
, the directory structure has a Windows syntax, and each file path must be separated by a
semicolon The semicolon or semi-colon is a symbol commonly used as orthographic punctuation. In the English language, a semicolon is most commonly used to link (in a single sentence) two independent clauses that are closely related in thought. When a ...
(";"). This does not apply when the Classpath is defined in
manifest file A manifest file in computing is a file containing metadata for a group of accompanying files that are part of a set or coherent unit. For example, the files of a computer program may have a manifest describing the name, version number, license and t ...
s, where each file path must be separated by a space (" "), regardless of the operating system.


See also

*
Java Classloader The Java Class Loader is a part of the Java Runtime Environment that dynamically loads Java classes into the Java Virtual Machine. Usually classes are only loaded on demand. The Java run time system does not need to know about files and file syste ...
*
Java Platform Module System The Java Platform Module System specifies a distribution format for collections of Java code and associated resources. It also specifies a repository for storing these collections, or ''modules'', and identifies how they can be discovered, loaded a ...


References

{{Reflist


External links


Note explaining how Java classes are found, on Oracle website


Classpath