13 Temmuz 2022 Çarşamba

CLASSPATH

Giriş
Açıklaması şöyle.
Classpath in Java is the path to a directory or list of directories that is used by ClassLoaders to find and load class in Java program. Classpath can be specified using CLASSPATH environment variable which is case insensitive, -cp or -classpath command line option or Class-Path attribute in manifest.mf file inside JAR file in Java. From below you can find out some important points about java CLASSPATH

1. Classpath in Java is an environment variable used by Java Virtual machine to locate or find class files in Java during class loading.

2. You can override value of Classpath in Java defined by environment variable CLASSPATH by providing JVM command line option –cp or –classpath while running your application.

3. If two classes with same name exist in Java Classpath then the class which comes earlier in Classpath will be picked by Java Virtual Machine.

4. By default CLASSPATH in Java points to current directory denoted by ”.” and it will look for any class only in current directory.

5. When you use the -jar command line option to run your program as an executable JAR, then the Java CLASSPATH environment variable will be ignored, and also the -cp and -classpath switches will be ignored and In this case you can set your java classpath in the META-INF/MANIFEST.MF file by using the Class-Path attribute.

6. In Unix of Linux Java Classpath contains names of directory with colon ”:” separated , On Windows Java Classpath will be semi colon ”;” separated while if you defined java classpath in Manifest file those will be space separated.

7. You can check value of classpath in java inside your application by looking at following system property “java.class.path” System.getProperty(“java.class.path”)
Yani
1. CLASSPATH ortamı değişkeni tanımlanır
2. JVM'i çaşıltırırken -cp seçeneği belirtilir. -cp seçeneği CLASSPATH ortamı değişkenini ezer
3. Executable jar için bu iki seçenek kullanılmaz. Sadece Manifest dosyasında "Class-Path" alanı kullanılır

1. CLATTPATH Ortam Değişkeni
Çalıştırılan uygulama CLASSPATH değişkeninde tanımlı jar'ları bulur

Örnek - Dizin
Windows'ta şöyledir.
C:\...\jdk1.8.0_77\bin;C:\...\jre1.8.0_77\bin
Örnek - Jar Dosyası
Şöyle yaparız
#Windows
set CLASSPATH=C:\a\Application.jar;C:\b\Application.jar

#Linux
export CLASSPATH=/a/Application.jar:/b/Application.jar

#MAC
export CLASSPATH=${CLASSPATH}:/a/Application.jar:/b/Application.jar
java.
2. JVM - cp seçeneği
Açıklaması şöyle.
$ java -help
    …
    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
Örnek - Dizin
Şöyle yaparız.
bash$ java -classpath path/to/jars/directory MyMainClass
Örnek - Dizin
Şöyle yaparız. bind isimli dizin kullanılır
"%JAVA_HOME%\jre\bin\java.exe" -classpath bind MyMainClass
Örnek - Birden fazla dizin
Windows'ta tek tırnak ile şöyle yaparız. Dizinler ; karakteri ile ayrılır
java -verbose -classpath '../lib;.' bt_sim <args>
Linux'ta dizinler : karakteri ile ayrılır.

Bu seçeneği kullanmak yerine CLASSPATH ortam değişkenini kullanmak daha iyi.
bash$ export CLASSPATH="path/to/jars/directory1:path/tojars/directory2"
bash$ javac MyMainClass.java
Örnek - wildcard
Açıklaması şöyle.
Class path entries can contain the basename wildcard character *, which is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR. For example, the class path entry foo/* specifies all JAR files in the directory named foo. A classpath entry consisting simply of * expands to a list of all the jar files in the current directory.
Bir dizindeki tüm jar'ları dahil etmek için şöyle yaparız.
java -cp /home/acelya/*: MyMainClass
Class Path Jar Sırası
Açıklaması şöyle. ClassLoader ClassPath'i tararken ilk bulduğu jar'ı kullanır
If I were to invoke my program with

java -cp A.jar:B.jar ExampleMain

the output is: Hello, A!

If I reverse the classpath like so

java -cp B.jar:A.jar ExampleMain

the output is: Hello, B!

Hiç yorum yok:

Yorum Gönder